3.1 决策树基本流程
一颗决策树包括:
- 根节点:包含样本全集
- 若干内部节点:对应属性测试
- 若干叶子结点:对应决策结果
- 结点包含的样本集合根据属性测试划分到子节点中国
基本流程遵循分而治之
伪代码:
【来源:西瓜书page74】
决策树算法是典型的递归算法。三种递归返回情况:
- 当前节点包含的样本权属同一个类别,无需划分
- 当前属性集为空,或者所有样本属性相同,无法划分。标记当前结点为叶子结点,类别设定为该节点所含样本最多的类别。实质上利用当前结点的后验分布
- 当前结点包含的样本集合为空,不能划分。标记当前结点为叶子结点,将其类别设定为父节点所含样本最多的类别。实质上利用父节点的样本分布作为当前结点的先验分布。
【后验概率 ∝ \propto ∝ 可能性 × \times × 先验概率】
3.2 划分选择
划分标准是能不断提高提高结点纯度
3.2.1 ID3决策树
3.2.1.1 信息熵
定义:度量样本集合纯度最常用的一种指标,其定义如下
Ent
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
log
2
p
k
\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}
Ent(D)=−k=1∑∣Y∣pklog2pk
其中
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
(
x
m
,
y
m
)
}
D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots\left(\boldsymbol{x}_{m}, y_{m}\right)\right\}
D={(x1,y1),(x2,y2),…(xm,ym)}表示样本集合,
∣
y
∣
|y|
∣y∣表示样本类别综述,
p
k
p_k
pk表示第k类样本所占的比例,且有
0
≤
p
k
≤
1
,
∑
k
=
1
∣
Y
∣
p
k
=
1
0 \leq p_{k} \leq 1, \sum_{k=1}^{|\mathcal{Y}|} p_{k}=1
0≤pk≤1,∑k=1∣Y∣pk=1. 而且
E
n
t
(
D
)
Ent(D)
Ent(D)值越小,纯度越高。 【为了具体量化纯度高低,也就是什么样的情况下的取值纯度高,什么情况下纯度低,我们要先求出信息熵的最大最小值。】
证明: 0 ≤ Ent ( D ) ≤ log 2 ∣ Y ∣ 0 \leq \operatorname{Ent}(D) \leq \log _{2}|\mathcal{Y}| 0≤Ent(D)≤log2∣Y∣
第一步,我们先求信息熵的最大值。
令
∣
Y
∣
=
n
,
p
k
=
x
k
|\mathcal{Y}|=n, p_{k}=x_{k}
∣Y∣=n,pk=xk,那么信息熵
Ent
(
D
)
\operatorname{Ent}(D)
Ent(D)就可以看成是一个
n
n
n元实值函数:
Ent
(
D
)
=
f
(
x
1
,
…
,
x
n
)
=
−
∑
k
=
1
n
x
k
log
2
x
k
\operatorname{Ent}(D)=f\left(x_{1}, \ldots, x_{n}\right)=-\sum_{k=1}^{n} x_{k} \log _{2} x_{k}
Ent(D)=f(x1,…,xn)=−k=1∑nxklog2xk
其中
0
≤
x
k
≤
1.
∑
k
=
1
n
x
k
=
1
0 \leq x_{k} \leq 1 . \sum_{k=1}^{n} x_{k}=1
0≤xk≤1.∑k=1nxk=1,下面考虑求该多元函数的最值。
如果不考虑约束
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1仅考虑
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1的话,对
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)求最大值等价于求如下最小化问题:
min
∑
k
=
1
n
x
k
log
2
x
k
s.t.
∑
k
=
1
n
x
k
=
1
\begin{aligned} \min \sum_{k=1}^{n} x_{k} \log _{2} x_{k} \\ \text { s.t. } \sum_{k=1}^{n} x_{k}=1 \end{aligned}
mink=1∑nxklog2xk s.t. k=1∑nxk=1
显然,在
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1 时,此问题为凸优化问题。【因为我们同样可以把目标函数看成是n个一元实值函数
x
log
2
x
x\log_{2} x
xlog2x相加和的结果。当x取值[0, 1]区间时,
(
x
log
2
x
)
′
′
>
0
\left(x \log _{2} x\right)^{\prime \prime} > 0
(xlog2x)′′>0,这就说明一元函数
x
log
2
x
x\log_{2}x
xlog2x在区间[0, 1]上是开口向上的凸函数。因此由n个这个一元函数组成的目标函数也是凸函数。现在的约束是线性函数约束,目标函数是凸函数,这就是凸优化问题。】
而对于凸优化问题来说,满足KKT条件的点就是最优解。由于此最小化问题仅含等式约束,那么能令其拉格朗日函数的一阶偏导数等于0的点即为满足KKT条件的点。
因此根据拉格朗日乘子法,该优化问题的拉格朗日函数为:
L
(
x
1
,
…
,
x
n
,
λ
)
=
∑
k
=
1
n
x
k
log
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
L\left(x_{1}, \ldots, x_{n}, \lambda\right)=\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)
L(x1,…,xn,λ)=k=1∑nxklog2xk+λ(k=1∑nxk−1)
对拉格朗日函数分别关于各个参数求一阶偏导,并令偏导数等于0可得
∂
L
(
x
1
,
…
,
x
n
,
λ
)
∂
x
1
=
∂
∂
x
1
[
∑
k
=
1
n
x
k
log
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
]
=
0
=
log
2
x
1
+
x
1
⋅
1
x
1
ln
2
+
λ
=
0
=
log
2
x
1
+
1
ln
2
+
λ
=
0
⇒
λ
=
−
log
2
x
1
−
1
ln
2
\begin{aligned} \frac{\partial L\left(x_{1}, \ldots, x_{n}, \lambda\right)}{\partial x_{1}} &=\frac{\partial}{\partial x_{1}}\left[\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)\right]=0 \\ &=\log _{2} x_{1}+x_{1} \cdot \frac{1}{x_{1} \ln 2}+\lambda=0 \\ &=\log _{2} x_{1}+\frac{1}{\ln 2}+\lambda=0 \\ & \Rightarrow \lambda=-\log _{2} x_{1}-\frac{1}{\ln 2} \end{aligned}
∂x1∂L(x1,…,xn,λ)=∂x1∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=0=log2x1+x1⋅x1ln21+λ=0=log2x1+ln21+λ=0⇒λ=−log2x1−ln21
同理
λ
=
−
log
2
x
1
−
1
ln
2
=
−
log
2
x
2
−
1
ln
2
=
…
=
−
log
2
x
n
−
1
ln
2
\lambda=-\log _{2} x_{1}-\frac{1}{\ln 2}=-\log _{2} x_{2}-\frac{1}{\ln 2}=\ldots=-\log _{2} x_{n}-\frac{1}{\ln 2}
λ=−log2x1−ln21=−log2x2−ln21=…=−log2xn−ln21
又
∂
L
(
x
1
…
.
x
n
⋅
λ
)
∂
λ
=
∂
∂
λ
[
∑
k
=
1
n
x
k
log
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
]
=
0
⇒
∑
k
=
1
n
x
k
=
1
\frac{\partial L\left(x_{1} \ldots . x_{n} \cdot \lambda\right)}{\partial \lambda}=\frac{\partial}{\partial \lambda}\left[\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)\right]=0\\ \Rightarrow \sum_{k=1}^{n} x_{k}=1
∂λ∂L(x1….xn⋅λ)=∂λ∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=0⇒k=1∑nxk=1
所以我们有
x
1
=
x
2
=
…
=
x
n
=
1
n
x_{1}=x_{2}=\ldots=x_{n}=\frac{1}{n}
x1=x2=…=xn=n1
又因为
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1, 显然
0
≤
1
n
≤
1
0 \leq \frac{1}{n} \leq 1
0≤n1≤1, 所以
x
1
=
x
2
=
…
=
x
n
=
1
n
x_{1}=x_{2}=\ldots=x_{n}=\frac{1}{n}
x1=x2=…=xn=n1是满足所有约束条件的最优解,也就是当前最小化问题的最小值点,以及原函数
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)的最大值点。将最优解代入原函数
f
f
f中可得
f
(
1
n
,
…
,
1
n
)
=
−
∑
k
=
1
n
1
n
log
2
1
n
=
−
n
⋅
1
n
log
2
1
n
=
log
2
n
f\left(\frac{1}{n}, \ldots, \frac{1}{n}\right)=-\sum_{k=1}^{n} \frac{1}{n} \log _{2} \frac{1}{n}=-n \cdot \frac{1}{n} \log _{2} \frac{1}{n}=\log _{2} n
f(n1,…,n1)=−k=1∑nn1log2n1=−n⋅n1log2n1=log2n
所以
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)在满足约束
0
≤
x
k
≤
1.
∑
k
=
1
n
x
k
=
1
0 \leq x_{k} \leq 1 . \sum_{k=1}^{n} x_{k}=1
0≤xk≤1.∑k=1nxk=1时的最大值为
log
2
n
\log_{2}n
log2n
第二步,我们求 E n t ( D ) Ent(D) Ent(D)的最小值。
如果不考虑
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1,仅考虑
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1,
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)可以看做是n个互不相关的一员函数的加和,也就是
f
(
x
1
,
…
,
x
n
)
=
∑
k
=
1
n
g
(
x
k
)
g
(
x
k
)
=
−
x
k
log
2
x
k
,
0
≤
x
k
≤
1
f\left(x_{1}, \ldots, x_{n}\right)=\sum_{k=1}^{n} g\left(x_{k}\right)\\ g\left(x_{k}\right)=-x_{k} \log _{2} x_{k}, \quad 0 \leq x_{k} \leq 1
f(x1,…,xn)=k=1∑ng(xk)g(xk)=−xklog2xk,0≤xk≤1
因此当
g
(
x
1
)
,
g
(
x
2
)
,
…
,
g
(
x
n
)
g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right)
g(x1),g(x2),…,g(xn)分别取到其最小值时,
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)也就取到了最小值。由于
g
(
x
1
)
,
g
(
x
2
)
,
…
,
g
(
x
n
)
g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right)
g(x1),g(x2),…,g(xn)的定义域和函数表达式相同,所以只需要求出
g
(
x
1
)
g(x_1)
g(x1)的最小值,也就求出了
g
(
x
1
)
,
g
(
x
2
)
,
…
,
g
(
x
n
)
g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right)
g(x1),g(x2),…,g(xn)的最小值。为了求
g
(
x
1
)
g(x_1)
g(x1)的最小值,我们先求
g
(
x
1
)
g(x_1)
g(x1)关于与
x
1
x_1
x1的一阶与二阶导数
g
′
(
x
1
)
=
d
(
−
x
1
log
2
x
1
)
d
x
1
=
−
log
2
x
1
−
x
1
⋅
1
x
1
ln
2
=
−
log
2
x
1
−
1
ln
2
g
′
′
(
x
1
)
=
d
(
g
′
(
x
1
)
)
d
x
1
=
d
(
−
log
2
x
1
−
1
ln
2
)
d
x
1
=
−
1
x
1
ln
2
\begin{array}{c} g^{\prime}\left(x_{1}\right)=\dfrac{d\left(-x_{1} \log _{2} x_{1}\right)}{d x_{1}}=-\log _{2} x_{1}-x_{1} \cdot \dfrac{1}{x_{1} \ln 2}=-\log _{2} x_{1}-\dfrac{1}{\ln 2} \\ g^{\prime \prime}\left(x_{1}\right)=\dfrac{d\left(g^{\prime}\left(x_{1}\right)\right)}{d x_{1}}=\dfrac{d\left(-\log _{2} x_{1}-\dfrac{1}{\ln 2}\right)}{d x_{1}}=-\dfrac{1}{x_{1} \ln 2} \end{array}
g′(x1)=dx1d(−x1log2x1)=−log2x1−x1⋅x1ln21=−log2x1−ln21g′′(x1)=dx1d(g′(x1))=dx1d(−log2x1−ln21)=−x1ln21
显然,当
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1时,
g
′
′
g^{\prime \prime}
g′′恒小于0,所以
g
(
x
1
)
g(x_1)
g(x1)是一个在其定义域范围内开口向下的凹函数,那么其最小值必然在边界取,于是分别取
x
1
=
0
x_1=0
x1=0和
x
1
=
1
x_1=1
x1=1,代入
g
(
x
1
)
g(x_1)
g(x1)可有
g
(
0
)
=
−
0
log
2
0
=
0
g
(
1
)
=
−
1
log
2
1
=
0
\begin{array}{l} g(0)=-0 \log _{2} 0=0 \\ g(1)=-1 \log _{2} 1=0 \end{array}
g(0)=−0log20=0g(1)=−1log21=0
所以
g
(
x
1
)
g(x_1)
g(x1)的最小值是0,同理,
g
(
x
2
)
,
…
,
g
(
x
n
)
g\left(x_{2}\right), \ldots, g\left(x_{n}\right)
g(x2),…,g(xn)的最小值也为0, 那么在约束条件
0
≤
x
k
≤
1
0 \leq x_{k} \leq 1
0≤xk≤1下,
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)的最小值此时也为0.如果加上约束条件
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1,那么
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)的最小值一定大于等于0. 如果令
x
k
=
1
x_{k}=1
xk=1,那么根据约束
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1可有
x
1
=
x
2
=
…
=
x
k
−
1
=
x
k
+
1
=
…
=
x
n
=
0
x_{1}=x_{2}=\ldots=x_{k-1}=x_{k+1}=\ldots=x_{n}=0
x1=x2=…=xk−1=xk+1=…=xn=0,将其代入
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)有
f
(
0
,
0
,
…
,
0
,
1
,
0
,
…
,
0
)
=
−
0
log
2
0
−
0
log
2
0
…
−
0
log
2
0
−
1
log
2
1
−
0
log
2
0
…
−
0
log
2
0
=
0
f(0,0, \ldots, 0,1,0, \ldots, 0)=-0 \log _{2} 0-0 \log _{2} 0 \ldots-0 \log _{2} 0-1 \log _{2} 1-0 \log _{2} 0 \ldots-0 \log _{2} 0=0
f(0,0,…,0,1,0,…,0)=−0log20−0log20…−0log20−1log21−0log20…−0log20=0
所以
x
=
1
,
x
1
=
x
2
=
…
=
x
k
−
1
=
x
k
+
1
=
…
=
x
n
=
0
x=1, x_{1}=x_{2}=\ldots=x_{k-1}=x_{k+1}=\ldots=x_{n}=0
x=1,x1=x2=…=xk−1=xk+1=…=xn=0一定是
f
(
x
1
,
…
,
x
n
)
f\left(x_{1}, \ldots, x_{n}\right)
f(x1,…,xn)在满足约束
0
≤
x
k
≤
1
,
∑
k
=
1
n
x
k
=
1
0 \leq x_{k} \leq 1 , \sum_{k=1}^{n} x_{k}=1
0≤xk≤1,∑k=1nxk=1的条件下的最小值点,最小值为0.
【也就是说,在一个集合中,针对n种标记取值,属于每一种标记的样本数量都相等,比例都为 1 n \frac{1}{n} n1的时候,信息熵取值最大,纯度最低。而所有样本标记都等于某一个标记、其他标记样本数量为0的时候,信息熵取值最小,纯度最高。】
3.2.1.2 条件熵
定义: 在已知样本属性
a
a
a的取值情况下,度量样本集合纯度的一种指标
H
(
D
∣
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
H(D \mid a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)
H(D∣a)=v=1∑V∣D∣∣Dv∣Ent(Dv)
其中
a
a
a表示样本的某个属性,假定属性
a
a
a有
V
V
V个可能的取值
{
a
1
,
a
2
…
,
a
V
}
\left\{a^{1}, a^{2} \ldots, a^{V}\right\}
{a1,a2…,aV}, 样本集合
D
D
D中在属性
a
a
a上取值为
a
v
a^{v}
av的样本记为
D
v
D^{v}
Dv,
E
n
t
(
D
v
)
Ent(D^{v})
Ent(Dv)表示样本集合
D
v
D^{v}
Dv的信息熵。
H
H
H值越小,纯度越高。
信息增益:
Gain
(
D
,
a
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
=
Ent
(
D
)
−
H
(
D
∣
a
)
\begin{aligned} \operatorname{Gain}(D, a) &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\ &=\operatorname{Ent}(D)-H(D \mid a) \end{aligned}
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−H(D∣a)
选择信息增益值最大的属性作为划分属性,因为信息增益越大,该属性用作划分所获得的的”纯度提升“越大。【注意这里的加和,对v加和是对a属性中不同的取值加和,信息熵中是对划分后的样本集合中的目标类别标签加和】
以信息增益为划分准则的ID3决策树对可取值数目较多的属性有所偏好
Gain
(
D
,
a
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
(
−
∑
k
=
1
∣
Y
∣
p
k
v
log
2
p
k
v
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
(
−
∑
k
=
1
∣
y
∣
∣
D
k
v
∣
∣
D
v
∣
log
2
∣
D
k
v
∣
∣
D
v
∣
)
\begin{aligned} \operatorname{Gain}(D, a) &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\ &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|}\left(-\sum_{k=1}^{|\mathcal{Y}|} p_{k} ^{v}\log _{2} p_{k}^{v}\right) \\ &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|}\left(-\sum_{k=1}^{|y|} \frac{\left|D_{k}^{v}\right|}{\left|D^{v}\right|} \log _{2} \frac{\left|D_{k}^{v}\right|}{\left|D^{v}\right|}\right) \end{aligned}
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−v=1∑V∣D∣∣Dv∣⎝⎛−k=1∑∣Y∣pkvlog2pkv⎠⎞=Ent(D)−v=1∑V∣D∣∣Dv∣⎝⎛−k=1∑∣y∣∣Dv∣∣Dkv∣log2∣Dv∣∣Dkv∣⎠⎞
其中
D
k
v
D_{k}^{v}
Dkv是样本集合
D
D
D中在属性
a
a
a上取值为
a
v
a^{v}
av且类别为
k
k
k的样本。
然后我们就可以把决策树基本算法的第8行选择属性设定为: a ∗ = arg max a ∈ A Gain ( D , a ) a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) a∗=a∈AargmaxGain(D,a).
缺点:如果某个属性的取值类别太多,就可能把每一个取值类别划分后就导致每个分支节点的纯度很高(只有一两个样本),虽然信息增益很大,但是因为结点划分太多,得到一个庞大且浅的树,失去了泛化能力
3.2.2 C4.5决策树
定义:以信息增益率为准则来选择划分属性的决策树。为了解决ID3的缺点。
信息增益率:
Gain_ratio
(
D
,
a
)
=
Gain
(
D
,
a
)
IV
(
a
)
\text { Gain\_ratio }(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}
Gain_ratio (D,a)=IV(a)Gain(D,a)
其中
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
log
2
∣
D
v
∣
∣
D
∣
\mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
如果属性a的可能取值数目越多,也就是V变大,那么IV的值也变大。
缺点:信息增益率对可取值数目较少的属性有所偏好。无法处理回归问题、使用较为复杂的熵来作为特征选择的标准、生成的决策树是一颗较为复杂的多叉树结构。
因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是采用了一个启发式:
- 先从候选属性中找到信息增益高于平均水平的属性集合
- 再从这个属性集合中选择增益率最高的属性
3.2.3 CART决策树
3.2.3.1 定义:
以基尼指数为准则来选择划分属性的决策树
基尼值:
Gini
(
D
)
=
∑
k
=
1
∣
Y
∣
∑
k
′
≠
k
p
k
p
k
′
=
∑
k
=
1
∣
Y
∣
p
k
∑
k
′
≠
k
p
k
′
=
∑
k
=
1
∣
Y
∣
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
∣
Y
∣
p
k
2
\operatorname{Gini}(D)=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}}=\sum_{k=1}^{|\mathcal{Y}|} p_{k} \sum_{k^{\prime} \neq k} p_{k^{\prime}}=\sum_{k=1}^{|\mathcal{Y}|} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2}
Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=k=1∑∣Y∣pkk′=k∑pk′=k=1∑∣Y∣pk(1−pk)=1−k=1∑∣Y∣pk2
直观来说,基尼值反映了从数据集
D
D
D中随机抽取两个样本,其类别标记不一致的概率。
基尼指数:
Gini_index
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Gini
(
D
v
)
\text { Gini\_index }(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)
Gini_index (D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
基尼值和基尼指数越小,样本集合纯度越高。
3.2.3.2 CART决策树分类算法:
- 根据基尼指数公式找出基尼指数最小的属性【伪代码算法第8行变成 a ∗ = arg min a ∈ A Gini_index ( D , a ) a_{*}=\underset{a \in A}{\arg \min } \operatorname{Gini\_index}(D, a) a∗=a∈AargminGini_index(D,a)】
- 计算属性 a ∗ a_{*} a∗的所有可能取值的基尼值 Gini ( D v ) , v = 1 , 2 , … , V \operatorname{Gini}\left(D^{v}\right), v=1,2, \ldots, V Gini(Dv),v=1,2,…,V, 选择基尼指数最小的取值 a ∗ v a^{v}_{*} a∗v作为划分点,将集合 D D D划分为 D 1 , D 2 D_1, D_{2} D1,D2两个集合(分支结点),其中 D 1 D_1 D1集合的样本为 a ∗ = a ∗ v a_{*}=a_{*}^{v} a∗=a∗v的样本, D 2 D_2 D2集合为 a ∗ ≠ a ∗ v a_{*} \neq a_{*}^{v} a∗=a∗v
- 对集合 D 1 D_1 D1和 D 2 D_2 D2重复递归步骤1,2,直到满足停止条件
3.2.3.3 CART决策树回归算法:
- 根据以下公式找到最优划分特征 a ∗ a_{*} a∗和最优划分点 a ∗ v a_{*}^{v} a∗v:
a ∗ , a ∗ v = arg min a , a v [ min c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 1 ) 2 + min c 2 ∑ x , ∈ D 2 ( a , a v ) ( y i − c 2 ) 2 ] a_{*}, a_{*}^{v}=\underset{a, a^{v}}{\arg \min }\left[\min_{c_{1}} \sum_{x_i \in D_{1}\left(a, a^{v}\right)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x, \in D_{2}\left(a, a^{v}\right)}\left(y_{i}-c_{2}\right)^{2}\right] a∗,a∗v=a,avargmin⎣⎡c1minxi∈D1(a,av)∑(yi−c1)2+c2minx,∈D2(a,av)∑(yi−c2)2⎦⎤
其中, D 1 ( a , a v ) D_{1}\left(a, a^{v}\right) D1(a,av)表示在属性 a a a上取值小于等于 a v a^{v} av的样本集合, D 2 ( a , a v ) D_2(a, a^{v}) D2(a,av)表示在属性 a a a上取值大于 a v a^{v} av的样本集合, c 1 c_1 c1表示 D 1 D_1 D1的样本输出均值, c 2 c_2 c2表示 D 2 D_2 D2的样本输出均值
- 根据划分点 a ∗ v a_{*}^{v} a∗v将集合 D D D划分为 D 1 D_1 D1和 D 2 D_2 D2两个集合(分支节点)
- 对集合 D 1 D_1 D1和 D 2 D_2 D2重复递归步骤1,2,直到满足停止条件
3.3 决策树剪枝处理
剪枝是决策树学习算法对付过拟合的主要手段
3.3.1 预剪枝
在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标注为叶结点。基于信息增益准则
【看是否提高在验证集上的准确率】
缺点:有些分支的当前划分虽不能提升泛化性能,但是在其基础上的后续划分却有可能导致性能提高。预剪枝基于贪心本质禁止这些分支继续划分,因此有可能导致模型欠拟合
3.3.2后剪枝
先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将子树替换为叶子结点
缺点:时间复杂度比预剪枝更高
预剪枝 | 后剪枝 | |
---|---|---|
时间开销 | 训练 ↓ \downarrow ↓, 测试 ↓ \downarrow ↓ | 训练 ↑ \uparrow ↑, 测试 ↓ \downarrow ↓ |
过/欠拟合风险 | 过 ↓ \downarrow ↓, 欠 ↑ \uparrow ↑ | 过 ↓ \downarrow ↓, 欠不变 |
泛化能力 | 更好 |
3.4 决策树处理连续值、缺失值
3.4.1 连续值处理
最简单的策略是采用二分法对连续属性进行处理。C4.5算法中采用了
给定样本集
D
D
D和连续属性a, 假定a在
D
D
D上出现n个不同取值,并将它们从小到大进行排序
{
a
1
,
a
2
,
…
,
a
n
}
\left\{a^{1}, a^{2}, \ldots, a^{n}\right\}
{a1,a2,…,an}. 我们课考察包含
n
−
1
n-1
n−1个元素的候选划分点集合
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
⩽
i
⩽
n
−
1
}
T_{a}=\left\{\frac{a^{i}+a^{i+1}}{2} \mid 1 \leqslant i \leqslant n-1\right\}
Ta={2ai+ai+1∣1⩽i⩽n−1}
也就是把区间
[
a
i
,
a
i
+
1
)
\left[a^{i}, a^{i+1}\right)
[ai,ai+1)的中位点
a
i
+
a
i
+
1
2
\frac{a^{i}+a^{i+1}}{2}
2ai+ai+1作为候选划分点。然后就可以考察这些划分点,选取最优的划分点进行样本集合的划分。
Gain
(
D
,
a
)
=
max
t
∈
T
a
Gain
(
D
,
a
,
t
)
=
max
t
∈
T
a
Ent
(
D
)
−
∑
λ
∈
{
−
,
+
}
∣
D
t
λ
∣
∣
D
∣
Ent
(
D
t
λ
)
\begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in T_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}} \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned}
Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣∣Dtλ∣∣Ent(Dtλ)
其中
Gain
(
D
,
a
,
t
)
\text{Gain}(D, a, t)
Gain(D,a,t)是样本集
D
D
D基于划分点
t
t
t二分后的信息增益。于是,我们就可以选择是
Gain
(
D
,
a
,
t
)
\text{Gain}(D, a, t)
Gain(D,a,t)最大化的划分点.
3.4.2 缺失值处理
待解决的两个问题:
- 如何在属性值确实的情况下进行划分属性选择?
- 给定划分选择,若样本在该属性上的值缺失,如何对样本进行划分?
首先考虑问题1.
给定训练集
D
D
D和属性
a
a
a,令
D
~
\tilde{D}
D~表示
D
D
D中在属性
a
a
a上没有缺失值的样本子集。显然我们只能根据
D
~
\tilde{D}
D~来判断属性
a
a
a的优劣。假定属性
a
a
a有
V
V
V个可能取值
{
a
1
,
a
2
,
…
,
a
V
}
\left\{a^{1}, a^{2}, \ldots, a^{V}\right\}
{a1,a2,…,aV}, 令
D
~
v
\tilde{D}^{v}
D~v表示
D
~
\tilde{D}
D~中在属性a上取值为
a
v
a^{v}
av的样本子集,
D
~
k
表
示
\tilde{D}_{k}表示
D~k表示
D
~
\tilde{D}
D~中属于第
k
k
k类(
k
=
1
,
2
,
…
,
∣
Y
∣
k=1,2, \ldots,|\mathcal{Y}|
k=1,2,…,∣Y∣)的样本子集。我们假定为每个样本
x
\boldsymbol{x}
x赋予一个权重
w
x
w_{\boldsymbol{x}}
wx(在学习开始阶段,根节点中各样本的权重初始化为1), 并定义
ρ
=
∑
x
∈
D
~
w
x
∑
x
∈
D
w
x
p
~
k
=
∑
x
∈
D
~
k
w
x
∑
x
∈
D
~
w
x
(
1
⩽
k
⩽
∣
Y
∣
)
r
~
v
=
∑
x
∈
D
~
v
w
x
∑
x
∈
D
~
w
x
(
1
⩽
v
⩽
V
)
\begin{aligned} \rho &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}} \\ \tilde{p}_{k} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant k \leqslant|\mathcal{Y}|) \\ \tilde{r}_{v} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant v \leqslant V) \end{aligned}
ρp~kr~v=∑x∈Dwx∑x∈D~wx=∑x∈D~wx∑x∈D~kwx(1⩽k⩽∣Y∣)=∑x∈D~wx∑x∈D~vwx(1⩽v⩽V)
显然,对属性
a
a
a:
- ρ \rho ρ表示无缺失值样本所占的比例
- p ~ k \tilde{p}_{k} p~k表示无缺失值样本中第 k k k类所占的比例
- r ~ v \tilde{r}_{v} r~v则表示无缺失值样本中在属性 a a a上取值 a v a^{v} av的样本所占的比例。
显然: ∑ k = 1 ∣ Y ∣ p ~ k = 1 , ∑ v = 1 V r ~ v = 1 \sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k}=1, \sum_{v=1}^{V} \tilde{r}_{v}=1 ∑k=1∣Y∣p~k=1,∑v=1Vr~v=1
信息增益的计算式变为
Gain
(
D
,
a
)
=
ρ
×
Gain
(
D
~
,
a
)
=
ρ
×
(
Ent
(
D
~
)
−
∑
v
=
1
V
r
~
v
Ent
(
D
~
v
)
)
\begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned}
Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))
其中
Ent
(
D
~
)
=
−
∑
k
=
1
∣
Y
∣
p
~
k
log
2
p
~
k
\operatorname{Ent}(\tilde{D})=-\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k} \log _{2} \tilde{p}_{k}
Ent(D~)=−k=1∑∣Y∣p~klog2p~k
【本质上就是通过无缺失样本的比例对各个量进行比例缩放。其中r和p本质上和之前的
∣
D
v
∣
∣
D
∣
\frac{\left|D^{v}\right|}{|D|}
∣D∣∣Dv∣和
∣
D
k
∣
∣
D
∣
\frac{\left|D_{k}\right|}{\left|D\right|}
∣D∣∣Dk∣没有区别】
然后考虑问题2.我们已经知道选择哪个划分属性了,然后把样本喂入决策树模型。如果样本 x x x在划分属性 a a a上的取值已知,则将 x x x划入与其取值对应的子结点,且样本权值在子结点中保持 w x w_x wx。如果样本 x x x在划分属性 a a a上取值未知,就将 x x x同时划入所有子结点,且样本权值在与属性值 a v a^{v} av对应的子节点中调整为 r ~ v ⋅ w x \tilde{r}_{v} \cdot w_{\boldsymbol{x}} r~v⋅wx.也就是让同一个样本以不同概率划入到不同的子结点中。