基于sklearn的机器学习 - 创建分类器

创建分类器

简介

    分类器是指利用数据的特性将其分成若干类型的过程。监督学习分类器就是利用代表及的训练数据建立
一个模型,然后对未知数据进行分类

建立简单的分类器

    代码参考learn1

建立逻辑回归分类器

    给定一组数据点,需要建立一个可以在类之间绘制线性边界的模型
逻辑回归就可以对训练数据派生一组方程进行求解来提取边界
代码参考learn2

建立朴素贝叶斯分类器

    朴素贝叶斯分类器是贝叶斯分定理进行建模的监督学期分类器
    参考learn3

特征归一化

    在机器学习过程中,各个特征的大小范围不一致,所谓 特征归一化 就是将不同类型的特征数值大小
变为一致的过程
    例子:
        归一化前:
        -------------------------------------
            样本 	 特征1  特征2
            1	       10001	  2
            2	       16020	  4
            3	       12008   6
            4	       13131   8
        -------------------------------------
        归一化后:
        -------------------------------------
            样本  	 特征1	 特征2
            1	        0	    0
            2	           1	    0.33
            3	           0.73	    0.67
            4	           0.81	    1
        -------------------------------------
特征归一化意义:
    各特征之间的大小范围一致,才能使用距离度量等算法
    加速梯度下降算法的收敛
    在SVM算法中,一致化的特征能加速寻找支持向量的时间
    不同的机器学习算法,能接受的输入数值范围不一样
两种常用方法:
    sklearn库中MinMaxScaler和StandardScaler
    使用:
    ---------------------------------------------------
    from sklearn.preprocessing import MinMaxScaler
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]
    min_max_scaler = MinMaxScaler()
    X_train_minmax = min_max_scaler.fit_transform(x)#归一化后的结果
    X_train_minmax
    array([[ 0.        ,  0.        ],
           [ 1.        ,  0.33333333],
           [ 0.33344409,  0.66666667],
           [ 0.52001994,  1.        ]])
           
    注:它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围
        是可调的(根据MinMaxScaler的参数feature_range调整)
    ---------------------------------------------------
    ---------------------------------------------------
    from sklearn.preprocessing import StandardScaler
    x=[[10001,2],[16020,4],[12008,6],[13131,8]]
    X_scaler = StandardScaler()
    X_train = X_scaler.fit_transform(x)
    X_train
    array([[-1.2817325 , -1.34164079],
           [ 1.48440157, -0.4472136 ],
           [-0.35938143,  0.4472136 ],
           [ 0.15671236,  1.34164079]])
    注:归一化后,矩阵每列的均值为0,标准差为1
    ---------------------------------------------------

Sklearn常用分类器

----------------------------------------------------
KNN Classifier

from sklearn.neighbors import KNeighborsClassifier
 
clf = KNeighborsClassifier()
clf.fit(train_x, train_y)

    先对训练数据进行分类,再对新输入的数据找到对应的类划分其中(类似少数服从多数的思想)
    算法概括:有A,B两类,以输入数据为圆心,以k为半径画圆,在圆内A,B那个的数量多则输入属于
该类。
    参数选择:李航波士《统计学习与方法》的书上讲到,我们一般选取一个较小的数,通常采用交叉验证来选取最优值

-----------------------------------------------------
Logistic Regression Classifier (逻辑回归分类器)
 
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(penalty='l2')
clf.fit(train_x, train_y)

    在分类的情况下,经过学习后的LR分类器实际上就是一组权重w0, w1, ...
当输入测试样本时,这组权重按照测试数据线性加和的方式,求出一个z:
       z = w0+w1*x1+w2*x2+...+wm*xm
    LR分类器最关键的问题就是求出一组权重,这涉及到极大似然估计和优化算法
应用场景:
    1.二分类观察结果
    2.一些影响因素之间的关系的一种多变量分析法
    3.某些因素条件下某个结果是否发生
解决过拟合的方法:
    1.增加数据量(万能办法)
    2.减少特征:手动剔除;特征选择算法
    3.正则化:结构风险最小化策略
    4.数据稀疏:L1正则化
    5.其他情况:L2正则化   

-----------------------------------------------------
Random Forest Classifier (随机森林分类器)

from sklearn.ensemble import RandomForestClassifier
 
clf = RandomForestClassifier(n_estimators=8)
clf.fit(train_x, train_y)

    随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本
 单元是决策树,它的本质属于机器学习的一大分支----集成学习方法
    直观解释,每棵决策树都是一个分类器,那么对于一个输入样本,N棵树就有
 N个分类结果。而随机森林就是集成了所有分类投票的结果,将次数最高的类别别
 最终作为输出。
 
 随机森林的特点:
    1.在当前所有算法中,具有极好的准确性
    2.能够有效地运行在大数据集上
    3.能够处理具有高维特征的输入样本,而且不需要降维
    4.能够评估各个特征在分类问题上的重要性
    5.在生成过程中,能够获取到内部生成误差的一种无偏估计
    

---------------------------------------------------
Decision Tree Classifier(决策树分类器)
 
from sklearn import tree
 
clf = tree.DecisionTreeClassifier()
clf.fit(train_x, train_y)

    决策树是一种无参监督学习方法,其目的是创建一种模型从数据特征中学习简单的决策规则
来预测一个目标变量的值。它可用于分类也可以用于回归。

优点:
    便于理解,可以可视化,分类速度快,需要数据量少,既可以处理连续属性也可以处理离散属性
缺点:
    模型可能会复杂,从而过拟合,单个决策树可能不稳定,可以通过集成学习缓解。
    
判断在某节点上的分类质量:
    分类:基尼指数,交叉熵,错误分类率
    回归:均方误差,平均绝对误差
--------------------------------------------------
GBDT(Gradient Boosting Decision Tree) Classifier(GBDT(梯度增强决策树)分类器)    

from sklearn.ensemble import GradientBoostingClassifier
 
clf = GradientBoostingClassifier(n_estimators=200)
clf.fit(train_x, train_y)

    GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive 
Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的
结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。

--------------------------------------------------
AdaBoost Classifier(演算法分类器)

from sklearn.ensemble import  AdaBoostClassifier
 
clf = AdaBoostClassifier()
clf.fit(train_x, train_y)

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),
然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)Adaboost算法本身是通
过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类
的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每
次得到的分类器最后融合起来,作为最后的决策分类器。

算法概述:
    1、先通过对N个训练样本的学习得到第一个弱分类器; 
    2、将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器; 
    3、将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器 
    4、最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
    
-------------------------------------------------
GaussianNB

from sklearn.naive_bayes import GaussianNB
 
clf = GaussianNB()
clf.fit(train_x, train_y)

    朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,
KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X
之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X)。但是朴素贝叶斯却是生成方
法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
朴素贝叶斯很直观,计算量也不大

使用:大部分数据是连续值

优点:
    1.朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    2.对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超
出内存时,我们可以一批批的去增量训练。
    3.对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    
缺点:
    1.在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,
朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
    2.对输入数据的表达形式很敏感

------------------------------------------------
 Linear Discriminant Analysis(线性判别分析)
 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
 
clf = LinearDiscriminantAnalysis()
clf.fit(train_x, train_y)

    给定一组训练样本,设法将样本投影到某一条直线上,使相同分类的点尽可能地接近而不同分类
的点尽可能地远,因此可以利用样本点在该投影直线上的投影位置来确定样本类型


-----------------------------------------------
Quadratic Discriminant Analysis(二次判别分析)

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
 
clf = QuadraticDiscriminantAnalysis()
clf.fit(train_x, train_y)

-----------------------------------------------
SVM Classifier    

from sklearn.svm import SVC
 
clf = SVC(kernel='rbf', probability=True)
clf.fit(train_x, train_y)

-----------------------------------------------
Multinomial Naive Bayes Classifier (多项朴素贝叶斯分类器)   

from sklearn.naive_bayes import MultinomialNB
 
clf = MultinomialNB(alpha=0.01)
clf.fit(train_x, train_y)

-----------------------------------------------

剪枝参数

    为了让决策树有更好的泛化性,需要对决策树进行剪枝。剪枝策略对决策树的
影响巨大,正确的剪枝策略是优化决策树的算法核心

max_depth:
    限制树的最大深度,超过设定深度的树枝全部剪掉,使用时一般从3开始尝试

min_samples_leaf和min_samples_split:
    用来限制一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf各训练样本,
否则分枝就不会发生

max_features 和 min_impurity_decrease:
    max_features限制分枝时考虑树的特征个数,超过的会被遗弃
    min_impurity_decrease限制信息增益大小

机器学习调参基本思想

1.找准目标
2.泛化误差

需要代码可以私信博主

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值