参考来源:
- https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning
- https://zhuanlan.zhihu.com/p/40857202?utm_source=qq
- https://www.jianshu.com/p/5563f1f9360d
1. 引言
在分析完波士顿房价数据之后,我们来看一下一开始提到的另一个经典数据集:鸢尾花数据。
1.1 收集数据集
从sklearn中导入数据集:
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
data.head()
处理过的鸢尾花数据前五行
各个特征的相关解释:
- sepal length (cm):花萼长度(厘米)
- sepal width (cm):花萼宽度(厘米)
- petal length (cm):花瓣长度(厘米)
- petal width (cm):花瓣宽度(厘米)
1.2 选择度量模型性能的指标
在分类任务中,我们对于每个类别犯错的代价不尽相同,例如:在银行贷款问题中,我们将贷款放给不会还贷的人和将会还贷的人拒之门外的代价是不同的,前者会造成银行的财产损失,后者会造成银行的效益损失,但不还贷款造成的损失远远大于未放贷造成的效益损失。因此我们很不希望出现前者,当我们发生了前者这样的错误的时候会认为建立的模型是很差的。为了解决这些问题,我们必须将各种情况分开讨论,然后给出评价指标。
划重点
- 真阳性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曲线作为最终评价指标。
1.3 选择具体的模型进行训练
根据处理连续数据的经验,我们能否用回归模型来处理离散型数据呢,我们仔细来看一个线性回归的例子, d e f a u l t = β 0 + β 1 B a l a n c e + β 2 I n c o m e {default = \beta_0 + \beta_1 Balance + \beta_2 Income} default=β0+β1Balance+β2Income,只要输入Balance 和 Income 以及default的数据就能用最小二乘法估计出 𝛽0,𝛽1 ,设定预测的default>0.5就是违约反之不违约,感觉很完美的样子,但事实真的是这样吗?假设我们需要用某个人的债务(Balance)和收入(Income)去预测是否会信用卡违约(default):
我们假设有一个穷人Lisa,他的Balance和Income都很小,那么有可能会导致default的值为负数,那么这个负数代表什么意义呢?显然是没有任何意义的。
当我们的分类变量是多类的时候,以0.5为界限划分分类就不可用了,那么我们应该怎么找到一个界限衡量多分类呢?那能不能把线性回归的结果default转化为区间[0:1]上,让default转变成一个违约的概率呢?
延伸阅读:逻辑回归和线性回归的对比
简单点来说,逻辑回归就是在线性回归的基础上,添加一个函数,这函数可以是对数函数,指数函数或其他更为复杂的函数,下面介绍一个函数。
logistic 函数:
首先,我们假设我们的线性回归模型为 Y = β 0 + β 1 X {Y=\beta_0+\beta_1 X} Y=β0+β1X,logistic 函数的具体的形式为:
P ( X ) = Y 1 + e Y = e β 0 + β 1 X 1 + e β 0 + β 1 X {P(X) = \dfrac{Y}{1+e^Y}=\dfrac{e^{\beta_0 + \beta_1X}}{1+e^{\beta_0 + \beta_1X}}} P(X)=1+eYY=1+eβ0+β1Xeβ0+β1X
这组函数具有神奇的作用,可以将是实数轴上的数转换为[0:1]区间上的概率。
它的函数图像如下图:(左边是线性回归,右边是逻辑函数)
假设逻辑回归模型为:
p
(
y
=
1
∣
x
)
=
1
1
+
e
−
w
T
x
p(y = 1|x) = \frac{1}{1+e^{-w^Tx}}
p(y=1∣x)=1+e−wTx1
下面求解参数
w
w
w,假设数据Data
{
(
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,xi∈Rp,yi∈{0,1},设
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=1∣x)=σ(wT)=1+e−wTx1。因为y只可能取0或者1,因此假设数据服从0-1分布,也叫伯努力分布,即:当y=1时,
p
(
y
∣
x
)
=
p
1
p(y|x)=p_1
p(y∣x)=p1,当y=0时,
p
(
y
∣
x
)
=
1
−
p
1
p(y|x)=1-p_1
p(y∣x)=1−p1,可以写成
p
(
y
∣
x
)
=
p
1
y
(
1
−
p
1
)
1
−
y
p(y|x) = p_1^y(1-p_1)^{1-y}
p(y∣x)=p1y(1−p1)1−y。
使用极大似然估计MLE,即:
w
^
=
a
r
g
m
a
x
w
l
o
g
P
(
Y
∣
X
)
=
a
r
g
m
a
x
x
l
o
g
∏
i
=
1
N
P
(
y
i
∣
x
i
)
=
a
r
g
m
a
x
w
∑
i
=
1
N
l
o
g
P
(
y
i
∣
x
i
)
=
a
r
g
m
a
x
w
∑
i
=
1
N
(
y
i
l
o
g
p
1
+
(
1
−
y
i
)
l
o
g
(
1
−
p
1
)
)
记
:
L
(
w
)
=
∑
i
=
1
N
(
y
i
l
o
g
p
1
+
(
1
−
y
i
)
l
o
g
(
1
−
p
1
)
)
∂
L
∂
w
k
=
∑
i
=
1
N
y
i
1
p
1
∂
p
1
∂
z
∂
z
∂
w
k
+
(
1
−
y
i
)
1
1
−
p
1
(
−
∂
p
1
∂
z
∂
z
∂
w
k
)
=
∑
i
=
1
N
y
i
1
σ
(
z
)
(
σ
(
z
i
)
−
σ
(
z
i
)
2
)
x
i
+
(
1
−
y
i
)
1
1
−
σ
(
z
i
)
[
−
(
σ
(
z
i
)
−
σ
(
z
i
)
2
)
x
i
]
=
∑
i
=
1
N
[
(
y
i
−
y
i
σ
(
z
i
)
)
x
i
+
(
1
−
y
i
)
(
−
σ
(
z
i
)
)
x
i
]
=
∑
i
=
1
N
y
i
x
i
−
σ
(
z
i
)
x
i
=
∑
i
=
1
N
(
y
i
−
σ
(
z
i
)
)
x
i
\hat{w} = argmax_w\;\;log\;P(Y|X) = argmax_x\;\;log\;\prod_{i=1}^N P(y_i|x_i) = argmax_w \sum\limits_{i=1}^{N} log\;P(y_i|x_i)\\ \;\;\; = argmax_w \sum\limits_{i=1}^{N}(y_ilog\;p_1 + (1-y_i)log(1-p_1)) \\ 记:L(w) = \sum\limits_{i=1}^{N}(y_ilog\;p_1 + (1-y_i)log(1-p_1))\\ \;\;\; \frac{\partial L}{\partial w_k} = \sum\limits_{i=1}^{N} y_i\frac{1}{p_1}\frac{\partial p_1}{\partial z}\frac{\partial z}{\partial w_k} + (1-y_i)\frac{1}{1-p_1}(-\frac{\partial p_1}{\partial z}\frac{\partial z}{\partial w_k})\\ \;\;\;=\sum\limits_{i=1}^{N}y_i\frac{1}{\sigma(z)}(\sigma(z_i)-\sigma(z_i)^2)x_i + (1-y_i)\frac{1}{1-\sigma(z_i)}[-(\sigma(z_i)-\sigma(z_i)^2)x_i]\\ \;\;\; =\sum\limits_{i=1}^{N}[(y_i-y_i\sigma(z_i))x_i + (1-y_i)(-\sigma(z_i))x_i]\\ \;\;\; = \sum\limits_{i=1}^{N}y_ix_i-\sigma(z_i)x_i = \sum\limits_{i=1}^{N}(y_i-\sigma(z_i))x_i
w^=argmaxwlogP(Y∣X)=argmaxxlogi=1∏NP(yi∣xi)=argmaxwi=1∑NlogP(yi∣xi)=argmaxwi=1∑N(yilogp1+(1−yi)log(1−p1))记:L(w)=i=1∑N(yilogp1+(1−yi)log(1−p1))∂wk∂L=i=1∑Nyip11∂z∂p1∂wk∂z+(1−yi)1−p11(−∂z∂p1∂wk∂z)=i=1∑Nyiσ(z)1(σ(zi)−σ(zi)2)xi+(1−yi)1−σ(zi)1[−(σ(zi)−σ(zi)2)xi]=i=1∑N[(yi−yiσ(zi))xi+(1−yi)(−σ(zi))xi]=i=1∑Nyixi−σ(zi)xi=i=1∑N(yi−σ(zi))xi
因此,
∂
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个特征
可以发现,逻辑回归可以解决分类问题,但在实际中不太用于多分类问题,因为实际效果不是很好,那么还有什么方法能较好解决这个问题呢?
2. 朴素贝叶斯
朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入 求出使得后验概率最大的输出 。
设有样本数据集 ,对应样本数据的特征属性集为 类变量为 ,即 可以分为 类别。其中 相互独立且随机,则 的先验概率 , 的后验概率 ,由朴素贝叶斯算法可得,后验概率可以由先验概率 、证据 、类条件概率 计算出:
贝
叶
斯
公
式
:
P
(
Y
∣
X
)
=
P
(
Y
)
P
(
X
∣
Y
)
P
(
X
)
贝叶斯公式:P(Y|X) = \frac{P(Y)P(X|Y)}{P(X)}
贝叶斯公式:P(Y∣X)=P(X)P(Y)P(X∣Y)
朴素贝叶斯基于各特征之间相互独立,在给定类别为 的情况下,上式可以进一步表示为下式:
P
(
X
∣
Y
=
y
)
=
∏
i
=
1
d
P
(
x
i
∣
Y
=
y
)
P(X|Y=y) = \prod_{i=1}^{d}P(x_i|Y=y)
P(X∣Y=y)=i=1∏dP(xi∣Y=y)
由以上两式可以计算出后验概率为:
P
p
o
s
t
=
P
(
Y
∣
X
)
=
P
(
Y
)
∏
i
=
1
d
P
(
x
i
∣
Y
)
P
(
X
)
P_{post} = P(Y|X) = \frac{P(Y)\prod_{i=1}^{d}P(x_i|Y)}{P(X)}
Ppost=P(Y∣X)=P(X)P(Y)∏i=1dP(xi∣Y)
由于的大小是固定不变的,因此在比较后验概率时,只比较上式的分子部分即可。因此可以得到一个样本数据属于类别的朴素贝叶斯计算:
P
(
y
i
∣
x
1
,
x
2
,
…
,
x
d
)
=
P
(
y
i
)
∏
i
=
1
d
P
(
x
i
∣
y
i
)
∏
i
=
1
d
P
(
x
i
)
P(y_i|x_1,x_2,\dots,x_d) = \frac{P(y_i)\prod_{i=1}^{d}P(x_i|y_i)}{\prod_{i=1}^{d}P(x_i)}
P(yi∣x1,x2,…,xd)=∏i=1dP(xi)P(yi)∏i=1dP(xi∣yi)
所以,使用朴素贝叶斯计算某个X属于哪一类被时,只要计算所有的 y i y_i yi找出 P ( y i ∣ x 1 , x 2 , … , x d ) P(y_i|x_1,x_2,\dots,x_d) P(yi∣x1,x2,…,xd)最大的一个 y i y_i yi即可。
在线性判别分析中,我们假设每种分类类别下的特征遵循同一个协方差矩阵,每两个特征之间是存在协方差的,因此在线性判别分析中各种特征并不是独立的。但是,朴素贝叶斯算法对线性判别分析作进一步的模型简化,假设各个特征之间是不相关的,我们知道模型的简化可以带来方差的减少但是增加偏差,因此朴素贝叶斯也不例外,它比线性判别分析模型的方差小,偏差大。虽然简化了模型,实际中使用朴素贝叶斯的案例非常多,甚至多于线性判别分析,例如鼎鼎大名的新闻分类,垃圾邮件分类等。
3. 决策树(CART)
基尼系数
参考来源:什么是基尼系数?
基尼系数(Gini coefficient):表征在二分类问题中,正负两种标签的分配合理程度。当G=0,说明正负标签的预测概率均匀分配,模型相当于是随机排序。这个名词也在经济学中也有使用,本质是相同的,是用来表征一个地区财富的分配的合理程度。当G=0,说明财富均匀分配。
当其用在决策树中时,可以用如下公式表示:
G
=
∑
k
=
1
K
p
^
m
k
(
1
−
p
^
m
k
)
G = \sum\limits_{k=1}^{K} \hat{p}_{mk}(1-\hat{p}_{mk})
G=k=1∑Kp^mk(1−p^mk)
其中
p
^
m
k
\hat{p}_{mk}
p^mk表示其被正确分类的概率,
(
1
−
p
^
m
k
)
(1-\hat{p}_{mk})
(1−p^mk)表示其被错误分类的概率。基尼系数越小,表示模型的分类效果越好。
CART与ID3,C4.5的区别与联系
①CART与ID3和C4.5相同都由特征选择,树的生成,剪枝组成。但ID3和C4.5用于分类,CART可用于分类与回归。
②ID3和C4.5生成的决策树可以是多叉的,每个节点下的叉树由该节点特征的取值种类而定。而CART为假设决策树为二叉树,内部结点特征取值为”是”和”否”。左分支取值为”是”,右分支取值为”否”。
CART的构造过程
- 对于现有数据集D,对于数据集中每个特征的每个取值,将其进行二分(“是”或“否”),计算出基尼系数。
- 对于每个特征的每个取值,在所有可能的切分点中,选择基尼系数最小的特征作为最优特征,该特征的切分点为最优切分点,以该点为根,继续向下构造二叉树。
- 重复1,2过程,直到满足停止条件(停止条件:样本个数小于预定阈值,或样本基尼指数小于预定阈值,或没有更多特征。)
交叉熵
基尼系数可以由另外一个指标—交叉熵来表示,定义如下:
D
=
−
∑
k
=
1
K
p
^
m
k
l
o
g
p
^
m
k
D = -\sum\limits_{k=1}^{K} \hat{p}_{mk}log\;\hat{p}_{mk}
D=−k=1∑Kp^mklogp^mk
和基尼系数一样,如果第m个结点的纯度越高,则交叉熵越小。事实证明,基尼系数和交叉熵在数值上时很接近的。
# 使用决策树算法对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
4. 支持向量机SVM
支持向量机的原理非常简单,就是在样本空间中找一个超平面,将不同类别的样本分开。如图所示,在二维空间中,就是找一条线将黑白颜色的点分类开来。但是,这样的线有很多,应该去找哪一个呢?这就是SVM所要解决的问题。
从直观上理解,我们应该找这样一条线,它应当距离分类的两个样本都“足够远”,远到我们在两个样本中再添加新样本,这条线也能很好的划分。
可以看到左右两图,这两条线都很好的把绿色和红色的点分离开来,但主观上感觉谁分的更好一些?应当是第二个,可以看到,第一个线上半部分几乎紧贴绿色类别的边缘,下半部分也几乎靠近红色类别的边缘。而第二条线距离两个类别都“足够远”。如果我们在每个类别中再添加一个点呢?
可以看到,分类器1把上半部分那个点分类到红色里面,下半部分分类到绿色里面。但我们从图上看上去,明显是分类器2分的更合理一些。SVM要做的事情,就是找到一个,距离需要分类的类型都“足够远”的超平面。
OK,理论结束,下面进入正题。(以下计算过程主要参考:《机器学习》 周志华 著)我们知道,在样本空间中,超平面可由如下式子来表示:
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0
其中
w
=
(
w
1
;
w
2
;
…
;
W
d
)
w=(w_1;w_2;\dots;W_d)
w=(w1;w2;…;Wd)为法向量。我们把这个超平面记作
(
w
,
b
)
(w,b)
(w,b)。那样本中任意点到超平面
(
w
,
b
)
(w,b)
(w,b)的距离可表示为
r
=
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
r = \frac{|w^Tx+b|}{||w||}
r=∣∣w∣∣∣wTx+b∣
假设这个超平面能正确分类样本,那么对于
y
i
=
1
y_i=1
yi=1有
w
T
x
i
+
b
>
0
w^Tx_i+b >0
wTxi+b>0;对于
y
i
=
−
1
y_i=-1
yi=−1有
w
T
x
i
+
b
<
0
w^Tx_i+b <0
wTxi+b<0,令:
{
w
T
x
i
+
b
⩾
+
1
,
y
i
=
+
1
w
T
x
i
+
b
⩽
−
1
,
y
i
=
−
1
\left\{\begin{aligned}w^Tx_i+b\geqslant +1,y_i=+1\\w^Tx_i+b\leqslant -1,y_i=-1\end{aligned}\right.
{wTxi+b⩾+1,yi=+1wTxi+b⩽−1,yi=−1(公式1)
距离超平面最近的样本点使上式等号成立,它们被称为“支持向量”,两个异类支持向量到超平面的距离和为
r
=
2
∣
∣
w
∣
∣
r=\frac{2}{||w||}
r=∣∣w∣∣2它被称为“间隔”(margin)。
OK,接下来的问题,我们就是要找一个“间隔”最大且满足公式1的超平面。即转化为问题:
m
a
x
w
,
b
2
∣
∣
w
∣
∣
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
(
1
,
2
,
…
,
m
)
max_{w,b} \frac2{||w||}\\ s.t. y_i(w^Tx_i+b)\geqslant1\quad,\quad i=(1,2,\dots,m)
maxw,b∣∣w∣∣2s.t.yi(wTxi+b)⩾1,i=(1,2,…,m)
显然,为了最大化间隔,只需要
∣
∣
w
∣
∣
2
||w||^2
∣∣w∣∣2最小即可,所以上式可转化为:
m
i
n
w
,
b
1
2
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
(
1
,
2
,
…
,
m
)
min_{w,b} \ \ {\frac 12}{||w||}^2\\ s.t. y_i(w^Tx_i+b)\geqslant1\quad,\quad i=(1,2,\dots,m)
minw,b 21∣∣w∣∣2s.t.yi(wTxi+b)⩾1,i=(1,2,…,m)(公式2)
这就是支持向量机(SVM)的基本型了。
若要求解公式2,可以使用拉格朗日乘子法转化为其“对偶问题”。对于公式2的每个约束条件都添加拉格朗日乘子
α
i
⩾
0
\alpha_i \geqslant 0
αi⩾0,则该问题的拉格朗日函数可写为:
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
(
公
式
3
)
L(w,b,\alpha) = \frac12||w||^2+\sum_{i=1}^m \alpha_i(1-y_i(w^Tx_i+b))\ \ \ \ \ \ \ \ \ (公式3)
L(w,b,α)=21∣∣w∣∣2+i=1∑mαi(1−yi(wTxi+b)) (公式3)
令
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)分别对
w
w
w和
b
b
b求偏导,令其为0可得:
w
=
∑
i
=
1
m
α
i
y
i
x
i
,
(
4
)
0
=
∑
i
=
1
m
α
i
y
i
,
(
5
)
w = \sum_{i=1}^{m}\alpha_iy_ix_i,\ \ \ \ \ \ \ \ \ \ \ \ \ \ (4)\\ 0 = \sum_{i=1}^{m}\alpha_iy_i,\ \ \ \ \ \ \ \ \ \ \ \ \ \ (5)
w=i=1∑mαiyixi, (4)0=i=1∑mαiyi, (5)
将4带入3,再加上5的约束条件,可以使用拉格朗日乘子法得到另一个对偶问题:
m
a
x
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
(
6
)
max_\alpha \sum_{i=1}^m \alpha_i - \frac12\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j\ \ \ \ \ \ \ \ \ \ \ \ \ \ (6)
maxαi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj (6)
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
s.t. \sum_{i=1}^m\alpha_iy_i = 0
s.t.∑i=1mαiyi=0
解出
α
\alpha
α后,求出
w
w
w和
b
b
b即可得到模型:
f
(
x
)
=
w
T
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
f(x) = w^T +b = \sum_{i=1}^m\alpha_iy_ix_i^Tx+b
f(x)=wT+b=i=1∑mαiyixiTx+b