本次 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
∂wk∂L=i=1∑N(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=1∑N(yi−σ(zi))xi(k),其中,xi(k)为第i个样本第k个特征 。
线性判别模型
除了压缩预测结果之外,我们也需要结果多分类的问题,而逻辑回归并不擅长,我们可以引入线性判别模型。可以从基于贝叶斯和降维分类的角度进行理解,在教程中写得很详细,首先是基于贝叶斯公式,贝叶斯公式先要理解先验概率,如果后来有时间,可以补一个简单的例子辅助理解;当样本给定的时候是一个与分类
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={xi∣yi=+1},同理,类别c2的特征
X
c
2
=
{
x
i
∣
y
i
=
−
1
}
X_{c_2} = \{x_i|y_i=-1 \}
Xc2={xi∣yi=−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=1∑Nzi=N1i=1∑NwTxi
全样本投影的协方差
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=1∑N(zi−zˉ)(zi−zˉ)T=N1i=1∑N(wTxi−zˉ)(wTxi−zˉ)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=1∑N1zi=N11i=1∑N1wTxi
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=1∑N1(zi−z1ˉ)(zi−z1ˉ)T=N11i=1∑N1(wTxi−z1ˉ)(wTxi−z1ˉ)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=1∑N2zi=N21i=1∑N2wTxi
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=1∑N2(zi−z2ˉ)(zi−z2ˉ)T=N21i=1∑N2(wTxi−z2ˉ)(wTxi−z2ˉ)T
类间差距:
(
z
ˉ
1
−
z
ˉ
2
)
2
(\bar{z}_1-\bar{z}_2)^2
(zˉ1−zˉ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ˉ1−zˉ2)2=wT(sc1+sc2)wwT(xˉc1−xˉc2)(xˉc1−xˉ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ˉc1−xˉc2)(xˉc1−xˉ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=Sw−1(xˉc1−xˉc2)
在前面的模型中,我们假设各个特征不是独立,如果进一步进行简化,就成为了朴素贝叶斯法。
决策树
在前面了解了回归树,个人认为和回归树最大的区别就是评价标准不同,比如C4.5用信息增益来选择特征,CART树用基尼指数进行筛选,这一部分可以参见《统计学习方法(第二版)》第五章
SVM
有关SVM的理解也在SVR中进行了简单的学习,这里也不再粘贴开源的教程。而对于非线性支持向量机留坑了。
最后分享萌弟大佬的分类的知乎链接

被折叠的 条评论
为什么被折叠?



