集成学习(上)Task05:掌握基本的分类模型


1 度量分类模型性能的指标

度量分类模型的指标和度量回归模型的指标为什么会有差异?

  • 分类问题本身的因变量是离散变量,因此像定义回归的指标那样,单单衡量预测值和因变量的相似度可能行不通;
  • 在分类任务中,我们对于每个类别犯错的代价不尽相同。

度量分类模型性能的指标是什么?

(1)基本的概念:

  • 真阳性 T P TP TP:实际值为正,预测值为正*
  • 真阴性 T N TN TN:实际值为正,预测值为负
  • 假阳性 F P FP FP:实际值为负,预测值为正
  • 假阴性 F N FN FN:实际值为负,预测值为负*

在这里插入图片描述

(2)分类模型的指标:

  • 准确率:【分类正确的样本数】占【总样本】的比例 A C C = T P + F N T P + T N + F P + F N ACC = \frac{TP+FN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+FN
  • 精度:【预测为正且分类正确的样本】占【预测为正的样本】的比例 P R E = T P T P + F P PRE = \frac{TP}{TP+FP} PRE=TP+FPTP
  • 召回率:【预测为正且分类正确的样本】占【真实为正的样本】的比例 R E C = T P T P + F N REC = \frac{TP}{TP+FN} REC=TP+FNTP
  • F1值: F 1 = 2 × P R E × R E C P R E + R E C F_1 = 2\times\frac{PRE\times REC}{PRE+REC} F1=2×PRE+RECPRE×REC
  • ROC曲线:以假阳率( F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP)为横轴,真阳率( T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP)为纵轴画出来的曲线,曲线下方面积越大越好

2 具体的分类模型

2.1 Logistic模型

在分类问题中,我们往往是通过已知 X X X的信息预测 Y Y Y的类别(往往是一个离散集合中的某个元素)。那么,从线性回归的问题中可以探索出分类的模型吗?换言之,我们希望将线性回归的结果转化到区间 [ 0 : 1 ] [0:1] [0:1]上,让 Y Y Y转变成一个概率

假设我们的线性回归模型为 Y = β 0 + β 1 X Y = \beta_0 + \beta_1X Y=β0+β1X

利用Logistic函数将线性回归的结果转化为概率: p ( X ) = e β 0 + β 1 X 1 + e β 0 + β 1 X p(X) = \frac {e^{\beta_0 + \beta_1X}}{1+e^{\beta_0 + \beta_1X}} p(X)=1+eβ0+β1Xeβ0+β1X

Logistic函数的图像为:
在这里插入图片描述
做一点简化。

假设数据为: { ( x i , y i ) } , i = 1 , 2 , . . . , N , x i ∈ R p , y i ∈ { 0 , 1 } \{(x_i, y_i)\}, i = 1, 2, ..., N, x_i \in R^p, y_i \in \{0, 1\} {(xi,yi)},i=1,2,...,N,xiRp,yi{0,1}
因为 y y y只可能取0或者1,因此假设数据服从0-1分布(伯努利分布)。

假设我们的Logistic模型为: p ( y ∣ x ) = 1 1 + e − w T X p(y|x) = \frac {1}{1+e^{-w^TX}} p(yx)=1+ewTX1

p 1 = p ( y = 1 ∣ x ) = σ ( w T ) = 1 1 + e − w T X p_1 = p(y=1|x) = \sigma(w^T) = \frac {1}{1+e^{-w^TX}} p1=p(y=1x)=σ(wT)=1+ewTX1

那么有 p ( y ∣ x ) = p 1 y ( 1 − p 1 ) 1 − y p(y|x) = p_1^y(1-p_1)^{1-y} p(yx)=p1y(1p1)1y

那么现在的目标是估计参数 w T w^T wT。利用极大似然估计法得到:
w ^ = arg max ⁡ w log ⁡ P ( Y ∣ X ) = arg max ⁡ w log ⁡ ∏ i = 1 N P ( y i ∣ x i ) = arg max ⁡ w ∑ i = 1 N log ⁡ P ( y i ∣ x i ) = arg max ⁡ w ∑ i = 1 N y i log ⁡ ( p 1 + ( 1 − y i ) log ⁡ ( 1 − p 1 ) ) \begin{aligned} \hat w &= \argmax_w \log P(Y|X) \\ & = \argmax_w \log \prod_{i=1}^N P(y_i|x_i)\\ & = \argmax_w \sum_{i=1}^N \log P(y_i|x_i)\\ & = \argmax_w \sum_{i=1}^N y_i \log (p_1 + (1-y_i) \log (1-p_1)) \end{aligned} w^=wargmaxlogP(YX)=wargmaxlogi=1NP(yixi)=wargmaxi=1NlogP(yixi)=wargmaxi=1Nyilog(p1+(1yi)log(1p1))

L ( w ) = arg max ⁡ w ∑ i = 1 N y i log ⁡ ( p 1 + ( 1 − y i ) log ⁡ ( 1 − p 1 ) ) L(w) = \argmax_w \sum_{i=1}^N y_i \log (p_1 + (1-y_i) \log (1-p_1)) L(w)=wargmaxi=1Nyilog(p1+(1yi)log(1p1))

则有(省略步骤)
∂ L ∂ w k = ∑ i = 1 N ( y i − σ ( z i ) ) x i \frac{\partial L}{\partial w_k} = \sum_{i=1}^N (y_i-\sigma (z_i))x_i wkL=i=1N(yiσ(zi))xi

值得注意的是,逻辑回归在实际中不太用于多分类问题,因为实际效果不是很好,所以我们可以借助其他模型来解决这个问题

2.2 基于概率的分类模型

(1)线性判别分析

  • 基于贝叶斯公式
    所用的公式是:
    { δ k ( x ) = l n ( g k ( x ) ) = l n π k + μ σ 2 x − μ 2 2 σ 2 μ ^ k = 1 n k ∑ i : y i = k x i σ ^ 2 = 1 n − K ∑ k = 1 K ∑ i : y i = k ( x i − μ ^ k ) 2 {\begin{cases}\delta_k(x) = ln(g_k(x))=ln\pi_k+\dfrac{\mu}{\sigma^2}x-\dfrac{\mu^2}{2\sigma^2}\\{\hat{\mu}_k =\dfrac{1}{n_k}\sum\limits_{i:y_i=k}x_i}\\{\hat{\sigma}^2 =\dfrac{1}{n-K}\sum\limits_{k=1}^K\sum\limits_{i:y_i=k}(x_i-\hat{\mu}_k)^2}\end{cases}} δk(x)=ln(gk(x))=lnπk+σ2μx2σ2μ2μ^k=nk1i:yi=kxiσ^2=nK1k=1Ki:yi=k(xiμ^k)2
    我们只需要代入数据求出 δ k ( x ) {\delta_k(x)} δk(x),哪个 k {k} k对应的 δ k ( x ) {\delta_k(x)} δk(x)大,就是哪一类(下图中,虚线是线性判别分析的决策边界,正态曲线哪边高样本就是哪一类)。

  • 基于降维分类的思想
    下图中,数据的维度是二维的,我们的想法是把数据降维至一维,然后用阈值就能分类。这个似乎是一个很好的想法,我们总是希望降维后的数据同一个类别自身内部方差小,不同类别之间的方差要尽可能大。这也是合理的,因为同一个类别的数据应该更加相似,因此方差小;不同类别的数据之间应该很不相似,这样才能更容易对数据进行分类。
    我们简称为:类内方差小,类间方差大,计算机语言叫“松耦合,高内聚”。
    在这里插入图片描述
    基本的统计量如下:
    特征 X = ( x 1 , x 2 , . . . , x N ) T X = (x_1,x_2,...,x_N)^T X=(x1,x2,...,xN)T
    因变量 Y = ( y 1 , y 2 , . . . , y N ) T Y = (y_1,y_2,...,y_N)^T Y=(y1,y2,...,yN)T,其中 y i ∈ { + 1 , − 1 } y_i \in \{+1,-1 \} yi{+1,1}
    类别 c 1 c_1 c1的特征 X c 1 = { x i ∣ y i = + 1 } X_{c_1} = \{x_i|y_i=+1 \} Xc1={xiyi=+1}
    类别 c 2 c_2 c2的特征 X c 2 = { x i ∣ y i = − 1 } X_{c_2} = \{x_i|y_i=-1 \} Xc2={xiyi=1}
    属于 c 1 c_1 c1类别的数据个数为 N 1 N_1 N1,属于类别 c 2 c_2 c2的数据个数为 N 2 N_2 N2,其中, N 1 + N 2 = N N_1+N_2 = N N1+N2=N
    特征 X X X投影在 w w w方向至一维: z i = w T x i ,      ∣ ∣ w ∣ ∣ = 1 z_i = w^Tx_i,\;\;||w|| = 1 zi=wTxi,w=1
    全样本投影的均值 z ˉ = 1 N ∑ i = 1 N z i = 1 N ∑ i = 1 N w T x i \bar{z} = \frac{1}{N}\sum\limits_{i=1}^{N}z_i = \frac{1}{N}\sum\limits_{i=1}^{N}w^Tx_i zˉ=N1i=1Nzi=N1i=1NwTxi
    全样本投影的协方差 S z = 1 N ∑ i = 1 N ( z i − z ˉ ) ( z i − z ˉ ) T = 1 N ∑ i = 1 N ( w T x i − z ˉ ) ( w T x i − z ˉ ) T S_z = \frac{1}{N}\sum\limits_{i=1}^{N}(z_i-\bar{z})(z_i-\bar{z})^T = \frac{1}{N}\sum\limits_{i=1}^{N}(w^Tx_i-\bar{z})(w^Tx_i-\bar{z})^T Sz=N1i=1N(zizˉ)(zizˉ)T=N1i=1N(wTxizˉ)(wTxizˉ)T
    c 1 c_1 c1样本投影的均值 z 1 ˉ = 1 N 1 ∑ i = 1 N 1 z i = 1 N 1 ∑ i = 1 N 1 w T x i \bar{z_1} = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}z_i = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}w^Tx_i z1ˉ=N11i=1N1zi=N11i=1N1wTxi
    c 1 c_1 c1样本投影的协方差 S z 1 = 1 N 1 ∑ i = 1 N 1 ( z i − z 1 ˉ ) ( z i − z 1 ˉ ) T = 1 N 1 ∑ i = 1 N 1 ( w T x i − z 1 ˉ ) ( w T x i − z 1 ˉ ) T S_{z_1} = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}(z_i-\bar{z_1})(z_i-\bar{z_1})^T = \frac{1}{N_1}\sum\limits_{i=1}^{N_1}(w^Tx_i-\bar{z_1})(w^Tx_i-\bar{z_1})^T Sz1=N11i=1N1(ziz1ˉ)(ziz1ˉ)T=N11i=1N1(wTxiz1ˉ)(wTxiz1ˉ)T
    c 2 c_2 c2样本投影的均值 z 2 ˉ = 1 N 2 ∑ i = 1 N 2 z i = 1 N 2 ∑ i = 1 N 2 w T x i \bar{z_2} = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}z_i = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}w^Tx_i z2ˉ=N21i=1N2zi=N21i=1N2wTxi
    c 2 c_2 c2样本投影的协方差 S z 2 = 1 N 2 ∑ i = 1 N 2 ( z i − z 2 ˉ ) ( z i − z 2 ˉ ) T = 1 N 2 ∑ i = 1 N 2 ( w T x i − z 2 ˉ ) ( w T x i − z 2 ˉ ) T S_{z_2} = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}(z_i-\bar{z_2})(z_i-\bar{z_2})^T = \frac{1}{N_2}\sum\limits_{i=1}^{N_2}(w^Tx_i-\bar{z_2})(w^Tx_i-\bar{z_2})^T Sz2=N21i=1N2(ziz2ˉ)(ziz2ˉ)T=N21i=1N2(wTxiz2ˉ)(wTxiz2ˉ)T
    类间差距: ( z ˉ 1 − z ˉ 2 ) 2 (\bar{z}_1-\bar{z}_2)^2 (zˉ1zˉ2)2
    类内方差: S 1 + S 2 S_1 + S_2 S1+S2
    由于线性判别分析的目标是同一类别内方差小,不同类别之间距离大,因此损失函数定义为: J ( w ) = ( z ˉ 1 − z ˉ 2 ) 2 s 1 + s 2 = w T ( x ˉ c 1 − x ˉ c 2 ) ( x ˉ c 1 − x ˉ c 2 ) T w w T ( s c 1 + s c 2 ) w J(w) = \frac{(\bar{z}_1-\bar{z}_2)^2}{s_1+s_2} = \frac{w^T(\bar{x}_{c_1}-\bar{x}_{c_2})(\bar{x}_{c_1}-\bar{x}_{c_2})^Tw}{w^T(s_{c_1}+s_{c_2})w} J(w)=s1+s2(zˉ1zˉ2)2=wT(sc1+sc2)wwT(xˉc1xˉc2)(xˉc1xˉc2)Tw
    w ^ = a r g m a x w    J ( w ) \hat{w} = argmax_w\;J(w) w^=argmaxwJ(w)
    记: S b = ( x ˉ c 1 − x ˉ c 2 ) ( x ˉ c 1 − x ˉ c 2 ) T ,    S w = ( s c 1 + s c 2 ) S_b = (\bar{x}_{c_1}-\bar{x}_{c_2})(\bar{x}_{c_1}-\bar{x}_{c_2})^T,\;S_w = (s_{c_1}+s_{c_2}) Sb=(xˉc1xˉc2)(xˉc1xˉc2)T,Sw=(sc1+sc2)
    因此 J ( w ) = w T S b w w T S w w J(w) = \frac{w^TS_bw}{w^TS_ww} J(w)=wTSwwwTSbw
    J ( w ) J(w) J(w) w w w求导等于0,求出: w = S w − 1 ( x ˉ c 1 − x ˉ c 2 ) w = S_w^{-1}(\bar{x}_{c_1}-\bar{x}_{c_2}) w=Sw1(xˉc1xˉc2)

(2)朴素贝叶斯

在线性判别分析中,我们假设每种分类类别下的特征遵循同一个协方差矩阵,每两个特征之间是存在协方差的,因此在线性判别分析中各种特征是不是独立的。但是,朴素贝叶斯算法对线性判别分析作进一步的模型简化,它将线性判别分析中的协方差矩阵中的协方差全部变成0,只保留各自特征的方差,也就是朴素贝叶斯假设各个特征之间是不相关的。在之前所看到的偏差-方差理论中,我们知道模型的简化可以带来方差的减少但是增加偏差,因此朴素贝叶斯也不例外,它比线性判别分析模型的方差小,偏差大。虽然简化了模型,实际中使用朴素贝叶斯的案例非常多,甚至多于线性判别分析,例如鼎鼎大名的新闻分类,垃圾邮件分类等。

2.3 决策树

参考我之前写的另一篇详细讲解分类树和回归树的文章:
Task02加篇1——小白理解决策树

2.4 支持向量机SVM

支持向量机SVM是20世纪90年代在计算机界发展起来的一种分类算法,在许多问题中都被证明有较好的效果,被认为是适应性最广的算法之一。但是推导过于复杂,之后会专门出一篇SVM应用型的文章。


3 利用sklearn构建完整的分类项目

所使用的数据为IRIS鸢尾花数据集。

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
feature = iris.feature_names
data = pd.DataFrame(X,columns=feature)
data['target'] = y

数据集预览如下:
在这里插入图片描述
其中,
sepal length (cm):花萼长度(厘米)
sepal width (cm):花萼宽度(厘米)
petal length (cm):花瓣长度(厘米)
petal width (cm):花瓣宽度(厘米)

# (1)逻辑回归
'''
penalty       {‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’正则化方式
dual      bool, default=False   是否使用对偶形式,当n_samples> n_features时,默认dual = False。   
C        float, default=1.0      
solver       {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}, default=’lbfgs’     
l1_ratio         float, default=None           
'''
from sklearn.linear_model import LogisticRegression
log_iris = LogisticRegression()
log_iris.fit(X,y)
log_iris.score(X,y)

结果: 0.9733333333333334

# (2)线性判别分析
'''
参数:
solver:{'svd','lsqr','eigen'},默认='svd'
solver的使用,可能的值:
'svd':奇异值分解(默认)。不计算协方差矩阵,因此建议将此求解器用于具有大量特征的数据。

'lsqr':最小二乘解,可以与收缩结合使用。

'eigen':特征值分解,可以与收缩结合使用。
'''
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda_iris = LinearDiscriminantAnalysis()
lda_iris.fit(X,y)
lda_iris.score(X,y)

结果:0.98

# (3)朴素贝叶斯             
from sklearn.naive_bayes import GaussianNB
NB_iris = GaussianNB()
NB_iris.fit(X, y)
NB_iris.score(X,y)

结果:0.96

# (4)使用决策树算法对iris分类:
'''
criterion:{“gini”, “entropy”}, default=”gini”
max_depth:树的最大深度。
min_samples_split:拆分内部节点所需的最少样本数
min_samples_leaf :在叶节点处需要的最小样本数。

'''
from sklearn.tree import DecisionTreeClassifier
tree_iris = DecisionTreeClassifier(min_samples_leaf=5)
tree_iris.fit(X,y)
tree_iris.score(X,y)

结果:0.9733333333333334

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
'''
C:正则化参数。正则化的强度与C成反比。必须严格为正。惩罚是平方的l2惩罚。
kernel:{'linear','poly','rbf','sigmoid','precomputed'},默认='rbf'
degree:多项式和的阶数
gamma:“ rbf”,“ poly”和“ Sigmoid”的内核系数。
shrinking:是否软间隔分类,默认true

'''
svc_iris = make_pipeline(StandardScaler(), SVC(gamma='auto'))
svc_iris.fit(X, y)
svc_iris.score(X,y)

结果:0.9733333333333334

可以看出,对于IRIS鸢尾花数据集,使用线性判别分析的结果最好(尽管与其他几种方法结果的差异微乎其微)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值