【2021.03--集成学习(上)-Task05】使用sklearn构建完整的分类项目

本次 DataWhale 第二十三期组队学习,其开源内容的链接为:[https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning](https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning)

本次Task的任务是从回归问题过渡到分类的问题,使用大名鼎鼎的鸢尾花数据集。对于该数据的介绍在Task01中也有所介绍,紧接着就是第二步——有关评价指标,即混淆矩阵以及几个常用评价指标:

  • 真阳性TP:预测值和真实值都为正例;
  • 真阴性TN:预测值与真实值都为负例;
  • 假阳性FP:预测值为正,实际值为负;
  • 假阴性FN:预测值为负,实际值为正;

分类模型的指标:

  • 准确率:分类正确的样本数占总样本的比例,即: A C C = T P + T N F P + F N + T P + T N ACC = \frac{TP+TN}{FP+FN+TP+TN} ACC=FP+FN+TP+TNTP+TN.
  • 精度:预测为正且分类正确的样本占预测值为正的比例,即: 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 F1 = 2\frac{PRE\times REC}{PRE + REC} F1=2PRE+RECPRE×REC.
  • ROC曲线:以假阳率为横轴,真阳率为纵轴画出来的曲线,曲线下方面积越大越好。

在比赛中总是根据需求选用,我个人平时ROC见得多一些。

逻辑回归

接下来是本Task的重点,有关分类模型的介绍。这里简单梳理(猜测)一下模型的发现思路(具体细节可见原文),假设用线性回归去拟合分类问题,会出现结果是负数的情况,但我们无法解释负数预测结果的意义,所以我们就自然的将结果压缩至0-1之间,用概率来作为预测结果,这样就是自然地引入了logistic 函数,具体的形式为 p ( X ) = e β 0 + β 1 X 1 + e β 0 + β 1 X {p(X) = \dfrac{e^{\beta_0 + \beta_1X}}{1+e^{\beta_0 + \beta_1X}}} p(X)=1+eβ0+β1Xeβ0+β1X,其中 β 0 + β 1 X \beta_0 + \beta_1X β0+β1X其实就是线性回归。而对逻辑回归的估计采用的是MLE,在极大似然估计的时候,需要用到样本的概率,所以假设样本服从伯努利分布,而具体的过程就不粘贴了。

需要注意的是,求偏导后得到 ∂ L ∂ w k = ∑ i = 1 N ( y i − σ ( z i ) ) x i \frac{\partial L}{\partial w_k} = \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i wkL=i=1N(yiσ(zi))xi,由于这里涉及的函数不像线性回归一样能简单求出解析解,因此我们使用迭代的优化算法:梯度下降法,即: w k ( t + 1 ) ← w k ( t ) − η ∑ i = 1 N ( y i − σ ( z i ) ) x i ( k ) , 其 中 , x i ( k ) 为 第 i 个 样 本 第 k 个 特 征 w_k^{(t+1)}\leftarrow w_k^{(t)} - \eta \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i^{(k)},其中,x_i^{(k)}为第i个样本第k个特征 wk(t+1)wk(t)ηi=1N(yiσ(zi))xi(k),xi(k)ik

线性判别模型

除了压缩预测结果之外,我们也需要结果多分类的问题,而逻辑回归并不擅长,我们可以引入线性判别模型。可以从基于贝叶斯和降维分类的角度进行理解,在教程中写得很详细,首先是基于贝叶斯公式,贝叶斯公式先要理解先验概率,如果后来有时间,可以补一个简单的例子辅助理解;当样本给定的时候是一个与分类 k {k} k无关的常数,所以我们的问题可以简化为只需要计算分子 π k f k ( x ) {{\pi}_kf_k(x)} πkfk(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 i ∈ { + 1 , − 1 } Y = (y_1,y_2,...,y_N)^T,\;\;其中,y_i \in \{+1,-1 \} Y=(y1,y2,...,yN)T,yi{+1,1},类别c1的特征 X c 1 = { x i ∣ y i = + 1 } X_{c_1} = \{x_i|y_i=+1 \} Xc1={xiyi=+1},同理,类别c2的特征 X c 2 = { x i ∣ y i = − 1 } X_{c_2} = \{x_i|y_i=-1 \} Xc2={xiyi=1},属于c1类别的数据个数为 N 1 N_1 N1,属于类别c2的数据个数为 N 2 N_2 N2,其中, N 1 + N 2 = N N_1+N_2 = N N1+N2=N
特征X投影在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
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
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
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
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        w ^ = a r g m a x w    J ( 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}\\ \;\;\; \hat{w} = argmax_w\;J(w) J(w)=s1+s2(zˉ1zˉ2)2=wT(sc1+sc2)wwT(xˉc1xˉc2)(xˉc1xˉc2)Tww^=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)对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)

在前面的模型中,我们假设各个特征不是独立,如果进一步进行简化,就成为了朴素贝叶斯法。

决策树

在前面了解了回归树,个人认为和回归树最大的区别就是评价标准不同,比如C4.5用信息增益来选择特征,CART树用基尼指数进行筛选,这一部分可以参见《统计学习方法(第二版)》第五章

SVM

有关SVM的理解也在SVR中进行了简单的学习,这里也不再粘贴开源的教程。而对于非线性支持向量机留坑了。

最后分享萌弟大佬的分类的知乎链接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值