文章目录
1、 ID3算法
1.1信息熵
- 衡量不确定性的指标,信息熵越大,不确定性越大
- 度量样本集合纯度的一种指标,值越小,样本集合的纯度越高
信息熵的定义如下:
H
(
D
)
=
−
∑
k
=
1
K
p
k
l
o
g
2
(
p
k
)
H(D)=-\sum_{k=1}^{K}p_{k}log_2(p_k)
H(D)=−k=1∑Kpklog2(pk)
其中,
p
k
p_k
pk为样本集中第k个类别的样本占总样本集的比例
- 熵H(Y)表示随机变量Y的不确定性程度
- 条件熵H(Y|X)表示Y在已知X的情况下不确定性的程度
- H(Y)-H(Y|X)称之为互信息,ID3中叫信息增益,表示Y在已知X情况下不确定减少的程度
1.2 信息增益
- 假设离散属性a有V个可能的取值, 那么用属性a来划分数据集D就可以产生V个分支结点,第v个分支结点的样本为 D v D^v Dv
- 考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ |D^v|/|D| ∣Dv∣/∣D∣,那么样本数越多的结点的影响就越大
属性a对样本集D划分的信息增益为:
g
(
D
,
a
)
=
H
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
H
(
D
v
)
g(D, a) = H(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}H(D^v)
g(D,a)=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)
信息增益越大,则使用属性a划分所获得的纯度提升就越大
ID3中使用最大化信息增益来选择划分属性
a
∗
=
a
r
g
m
a
x
a
∈
A
g
(
D
,
a
)
a_* = \mathop{argmax}\limits_{a\in A}g(D, a)
a∗=a∈Aargmaxg(D,a)
1.3 根据信息增益来选择属性的例子
属性:{色泽、根蒂、敲声、纹理、脐部、触感}
以色泽为例划分样本集,可分为
D
1
D^1
D1(色泽=青绿)、
D
2
D^2
D2(色泽=乌黑)、
D
3
D^3
D3(色泽=浅白)三个子集
H
(
D
)
=
−
(
8
17
l
o
g
2
8
17
+
9
17
l
o
g
2
9
17
)
=
0.998
H
(
D
1
)
=
−
(
3
6
l
o
g
2
3
6
+
3
6
l
o
g
2
3
6
)
=
1
H
(
D
2
)
=
−
(
4
6
l
o
g
2
4
6
+
2
6
l
o
g
2
2
6
)
=
0.918
H
(
D
3
)
=
−
(
1
5
l
o
g
2
1
5
+
4
5
l
o
g
2
4
5
)
=
0.722
\begin{aligned} &H(D) = -(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17}) =0.998\\ &H(D^1) = -(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6}) = 1\\ &H(D^2) = -(\frac{4}{6}log_2\frac{4}{6} + \frac{2}{6}log_2\frac{2}{6}) = 0.918\\ &H(D^3) = -(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5}) = 0.722 \end{aligned}
H(D)=−(178log2178+179log2179)=0.998H(D1)=−(63log263+63log263)=1H(D2)=−(64log264+62log262)=0.918H(D3)=−(51log251+54log254)=0.722
属性“色泽”的信息增益为:
g
(
D
,
色
泽
)
=
H
(
D
)
−
∑
v
=
1
3
∣
D
v
∣
∣
D
∣
H
(
D
v
)
=
0.998
−
(
6
17
×
1
+
6
17
×
0.918
+
5
17
×
0.722
)
=
0.109
\begin{aligned} g(D, 色泽) &= H(D)-\sum_{v=1}^{3}\frac{|D^v|}{|D|}H(D^v)\\ &=0.998-(\frac{6}{17}\times1+\frac{6}{17}\times0.918+\frac{5}{17}\times0.722)\\ &=0.109 \end{aligned}
g(D,色泽)=H(D)−v=1∑3∣D∣∣Dv∣H(Dv)=0.998−(176×1+176×0.918+175×0.722)=0.109
同理,依次算出其他属性的信息增益
g(D, 根蒂) = 0.143,g(D, 敲声)=0.141, g(D, 纹理) = 0.381, g(D, 脐部) = 0.289, g(触感) = 0.006
可知纹理的信息增益最大,所以选择纹理作为划分属性
接下来,就在每个子样本集中从{色泽、根蒂、敲声、脐部、触感}中选择信息增益最大的属性作为划分属性
1.4 ID3算法流程
输入:训练样本集D,特征集A,阈值
ϵ
\epsilon
ϵ
输出:决策树T
(1) 若D中实例全为同一个类别
C
k
C_k
Ck,则返回单结点树T,
C
k
C_k
Ck为该结点的类标记
(2) 若A=
ϕ
\phi
ϕ,则返回单结点数T,将D中实例数最多的类
C
k
C_k
Ck作为该节点的类标记
(3) 否则,计算A中各个特征对D的信息增益,选取信息增益最大的那个特征
A
g
A_g
Ag
(4) 若
g
(
D
,
A
g
)
<
ϵ
g(D,A_g)<\epsilon
g(D,Ag)<ϵ,则返回单结点树,并将D中实例数最多的类
C
k
C_k
Ck作为该结点的类标记
(5) 否则,根据
A
g
A_g
Ag的取值划分样本到各个分支,记为
D
i
D_i
Di, 返回增加结点的树T
(6) 对所有子结点,令
D
=
D
i
,
A
=
A
−
A
g
D=D_i, A=A-A_g
D=Di,A=A−Ag,递归调用以上(1)-(6)步,得到子树
T
i
T_i
Ti
1.5 ID3算法的缺点
- 没有考虑连续特征
- 没有考虑处理缺失值
- 没有考虑过拟合问题
- 取值较多的特征比取值较少的特征信息增益大,偏向于选择取值较多的特征
2、 C4.5算法
C4.5算法针对ID3算法的各个缺点进行了改进
2.1 信息增益率
g
r
(
D
,
a
)
=
g
(
D
,
a
)
I
V
(
a
)
g_r(D, a) = \frac{g(D, a)}{IV(a)}
gr(D,a)=IV(a)g(D,a)
其中,
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
g
(
D
,
a
)
=
H
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
H
(
D
v
)
\begin{aligned} & IV(a) = -\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}\\ & g(D, a) = H(D) - \sum_{v=1}^{V}\frac{|D^v|}{|D|}H(D^v) \end{aligned}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣g(D,a)=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)
- IV(a)为属性a的固有值,属性a的取值数越多(V越多),IV(a)就越大
- 信息增益率对取值数较少的属性有偏好
- 使用启发式方法:从候选划分属性中找到信息增益高于平均水平的属性,再从选择信息增益率最大的
2.2 连续特征离散化
- 连续特征a有m个样本,从小到大排列为 a 1 , a 2 , . . . , a m a_1, a_2,...,a_m a1,a2,...,am
- 取相邻样本的均值, 得到m-1个划分点
- 计算这m-1个划分点的信息增益率,取增益率最大的划分点为划分属性将样本划分为两个部分
- 连续属性再后面还可以参与属性选择(删去之前连续属性的划分点)
2.4 剪枝
利用正则化系数进行初步剪枝,再CART树中讲解
2.5 缺失值的处理
两个子问题
- 属性有缺失值,如何划分属性
- 给定划分属性后,样本在该属性上的值缺失,如何划分样本
(1) 对第一个子问题:
- 将样本集分为两部分,一部分是没有属性缺失值的样本集 D 1 D_1 D1,另一部分是有属性缺失值的样本集 D 2 D_2 D2
- 计算各个属性对 D 1 D_1 D1的信息增益率,并乘以一个系数(无属性缺失值样本所占总样本的比例子,即 ∣ D 1 ∣ / ∣ D ∣ |D_1|/|D| ∣D1∣/∣D∣)
(2)对第二个子问题
- 将缺失属性值的样本也划入所有的子结点中
- 引入权重的概念,无属性缺失值样本的权重为1,缺失属性值样本的权重为其划分到各子结点前,各子结点中样本所占的比例
2.5 C4.5的缺点
- 剪枝的方法可以优化,预剪枝,在决策树生成的时候决定剪枝;后剪枝,在决策树生成后通过交叉验证来剪枝
- 生成的是多叉树,但二叉树的运行效率较高
- 只能用于分类
- 熵模型,有大量耗时的对数运算,连续值还有大量的排序运算
3 CART分类树
3.1 基尼指数
假设有K个类别,样本点属于第k类的概率为
p
k
p_k
pk,概率分布的基尼指数定义如下
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(p) =\sum_{k=1}^{K}p_k(1-p_k) = 1-\sum_{k=1}^{K}{p_k}^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于样本集D
G
i
n
i
(
D
)
=
1
−
∑
v
=
1
V
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D) = 1-\sum_{v=1}^{V}(\frac{|C^k|}{|D|})^2
Gini(D)=1−v=1∑V(∣D∣∣Ck∣)2
C
k
C^k
Ck为第k个类别的样本子集, K是类的个数
- Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,
- Gini(D)越小,反映数据集D的纯度越高
如果样本集D根据特征A的某一可能取值a被划分为
D
1
D_1
D1和
D
2
D_2
D2两个部分
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
}
,
D
2
=
D
−
D
1
D_1= \{(x,y)\in D|A(x)=a\}, D_2 = D-D_1
D1={(x,y)∈D∣A(x)=a},D2=D−D1
在特征A的条件下
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART分类树中,使用基尼指数来代替信息增益率,选择划分属性,且只对某个特征值进行二分, 建立二叉树
3.2 连续特征和离散特征的处理
(1) 连续特征, 离散化和C4.5一样只是将信息增益率换成了基尼指数
(2) 离散特征, 不停的二分离散特征
- CART分类树会把特征A, 分为{A1}和{A2,A3}, {A2}和{A1, A3}, {A3}和{A1, A2}三种情况
- 选择基尼指数最小的组合, 如{A1}和{A2, A3},建立二叉树结点
- 由于没有将特征A的取值完全分开,后面还有机会选择{A2}和{A3}
- 与ID3和C4.5不同,在ID3和C4.5的一棵子树中,离散特征只会参与一次结点的建立
3.3 CART分类树算法流程
输入:数据集D, 样本个数阈值,基尼指数阈值
输出:决策树T
从根节点开始,用训练集递归的建立CART树
(1) 对当前结点的数据集D, 如果其样本个数小于阈值或没有特征, 返回决策子树, 当前结点停止递归
(2) 计算样本集D的基尼指数, 如果小于阈值,返回决策子树,当前结点停止递归
(3)计算当前结点现有的各个特征的各个特征值对数据集D的基尼指数
(4) 选择基尼指数最小的特征A对应的特征值a,将数据集划分为D1和D2两个部分
(5) 对左右子结点递归调用1-4步,生成决策树
4、CART回归树
回归树和分类树的区别:
- 样本输出的离散值,那么这是分类树
- 样本输出是连续值,那么这是回归树
CART回归树和分类树的建立和预测的2点区别: - 连续值的处理方法不同
- 决策树建立后预测的方式不同
4.1 对于连续值处理的区别
- CART分类树,采用基尼指数选择特征
- 回归树采用了和方差的度量方式
CART回归树的度量指标:对于特征A的取值s,划分成的数据集D1和D2,使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小。
m
i
n
A
,
s
[
m
i
n
c
1
∑
x
i
∈
D
1
(
A
,
s
)
(
y
i
−
c
1
)
2
+
m
i
n
c
1
∑
x
i
∈
D
2
(
A
,
s
)
(
y
i
−
c
2
)
2
]
\mathop{min}\limits_{A,s}[\mathop{min}\limits_{c_1} \sum_{x_i \in D_1(A,s)} (y_i-c_1)^2+\mathop{min}\limits_{c_1} \sum_{x_i \in D_2(A,s)} (y_i-c_2)^2]
A,smin[c1minxi∈D1(A,s)∑(yi−c1)2+c1minxi∈D2(A,s)∑(yi−c2)2]
其中, c 1 c_1 c1为 D 1 D_1 D1数据集的样本输出均值, c 2 c_2 c2为 D 2 D_2 D2数据集的样本输出均值
4.2 预测方式的区别
- CART分类树,采用叶子结点中多数样本的类
- CART回归树,采用叶子结点的均值或中位数
5、决策树损失函数的度量
- 决策树学习的损失函数通常是正则化的极大似然函数
- 选取最优决策树是NP难问题,采用启发式方法,近似求解,得到次优解的决策树
- 决策树学习算法,递归的选择最优特征,使各子集在当前条件下分类最好。
- 决策树的生成只考虑局部最优,决策树的剪枝考虑全局最优
- 决策树算法包括:特征选择, 决策树生成,决策树剪枝
- 决策树的剪枝往往通过极小化决策树整体的损失函数决定来实现
假设树T的叶子结点为|T|,t是树T的叶子结点,该叶结点有
N
t
N_t
Nt个样本点,其中k类样本点有
N
t
k
N_{tk}
Ntk
H
t
(
T
)
H_t(T)
Ht(T)表示叶结点t的经验熵(CART分类树用基尼指数)
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
l
o
g
N
t
k
N
t
H_t(T) = -\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}
Ht(T)=−k∑NtNtklogNtNtk
CART分类树表示为
H
t
(
T
)
=
1
−
∑
k
p
k
2
H_t(T) = 1-\sum_k{p_k}^2
Ht(T)=1−∑kpk2
决策树的损失函数:
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| = C(T)+\alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣=C(T)+α∣T∣
- C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型的复杂度。
-
α
\alpha
α确定是,子树越大,往往与训练数据的拟合越好,模型复杂度越高
只有在剪枝过程中才有损失函数
6、CART树的剪枝
- CART回归树和CART分类树的剪枝策略:除了在度量损失的时候一个使用均方差,一个使用基尼系数,算法基本完全一样。
- 解决过拟合的方法:对CART树进行剪枝,类似正则化
- CART树采用后剪枝,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。
CART树的剪枝算法可以分为两步:
- 从生成的决策树 T 0 T_0 T0底端开始不断剪枝, 直到 T 0 T_0 T0的根结点,形成一个子树序列 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn
- 然后用交叉验证法对子树序列进行测试,选择最优树
6.1 剪枝的损失函数
在剪枝过程中,对于任意一颗子树的损失函数为:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T) = C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣用和均方差度量
其中,
α
≥
0
\alpha \ge0
α≥0 为正则化参数,
C
(
T
)
C(T)
C(T)为训练数据的预测误差(分类树用基尼指数,回归树用和均方差度量),|T|为子树T的叶子结点数量。
- 若 α = 0 \alpha=0 α=0, 没有正则化,原始生成的CART树就是最优树
- 若 α = ∞ \alpha=\infty α=∞, 正则化最大,只有根节点的子树是最优树
-
α
\alpha
α越大,剪枝越厉害,生成的最优子树越小
对于固定的 α \alpha α,一定存在损失函数最小的子树
6.2 正则化参数的选择
位于结点t的任意一棵子树
T
t
T_t
Tt,如果没有剪枝,损失为:
C
α
(
T
t
)
=
C
(
T
t
)
+
α
∣
T
t
∣
C_\alpha(T_t) = C(T_t)+\alpha|T_t|
Cα(Tt)=C(Tt)+α∣Tt∣
如果将t剪掉,只保留t的根节点,损失为:
C
α
(
T
)
=
C
(
T
)
+
α
C_\alpha(T) = C(T)+\alpha
Cα(T)=C(T)+α
- C ( T t ) < C ( T ) C(T_t)<C(T) C(Tt)<C(T), 当 α = 0 \alpha=0 α=0或很小时, C α ( T t ) < C α ( T ) C_\alpha(T_t)<C_\alpha(T) Cα(Tt)<Cα(T)
- 当
α
\alpha
α增大到一定时,
C
α
(
T
t
)
=
C
α
(
T
)
,
α
=
C
(
T
)
−
C
(
T
t
)
∣
T
t
∣
−
1
C_\alpha(T_t) = C_\alpha(T), \alpha = \frac{C(T)-C(T_t)}{|T_t|-1}
Cα(Tt)=Cα(T),α=∣Tt∣−1C(T)−C(Tt),
T
t
T_t
Tt与
∣
T
∣
|T|
∣T∣的损失相同,但T结点更少,可以对
T
t
T_t
Tt剪枝
CART树的交叉验证策略 - 计算每个子树是否剪枝的阈值 α \alpha α
- 针对不同的 α \alpha α所对应的剪枝后的最优子树,做交叉验证,选取一个最好的 α \alpha α
6.3 CART树的缺点
- 分类决策时由一个特征决定,而不是由一组特征决定(改进:多变量决策树,选择最优的特征线性组合来决策)
- 如果样本发生一点点的改动,会导致树结构剧烈改变(改进:集成学习)
7、决策树算法总结
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 |
---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 支持 | 支持 | 支持 |
CART | 分类、回归 | 二叉树 | 基尼指数 | 支持 | 支持 | 支持 |
7.1 决策树的优点
- 简单直观,决策树的生成很直观,可解释性好
- 不需要预处理,不需要归一化
- 能处理缺失值,离散值和连续值
- 通过交叉验证的剪枝来选择模型,提高泛化能力
- 对异常点的容错能里好健壮性高
7.2 决策树的缺点
- 非常任意过拟合,泛化能力不强。通过设置结点最少样本数和决策树的深度来改进。
- 样本发生一点点的变动,会导致树结构的剧烈改变。通过集成学习改进
- 寻找最优决策树的一个NP难问题,一般通过启发式方法,容易陷入局部最优。通过集成学习改进。
- 比较复杂的关系,决策树很难学习,比如异或。通过神经网络解决。
- 如果某些特征样本比例过大,生成的决策树容易偏向这些特征。通过调节样本的权重来改善。
参考博客