决策树的核心过程就是建树过程中的分支处理。
1、ID3
ID3决策树学习算法由罗斯·昆兰(J. Ross Quinlan)在1986年发表。其主要思想是以信息增益为准则来划分特征。
根据“信息熵”的概念,信息熵越大,包含的信息越多。在决策树建树的过程中,每次划分特征都希望分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”(purity)越来越高。
信息熵是度量样本集合纯度最常用的一种指标。假定当前样本集合 D D D中第 k k k类样本所占的比例为 p k ( k = 1 , 2 , . . . , K ) p_k(k=1,2,...,K) pk(k=1,2,...,K),则 D D D的信息熵定义为: E n t ( D ) = − ∑ k = 1 K p k l o g 2 p k ( 式 1 ) Ent(D)=-\sum_{k=1}^Kp_klog_2p_k\space\space\space(式1) Ent(D)=−k=1∑Kpklog2pk (式1) E n t ( D ) Ent(D) Ent(D)的值越小,则D的纯度越高。
假定离散特征 a a a有 V V V个可能的取值 { a 1 , a 2 , . . . , a V } \{a^1,a^2,...,a^V\} {a1,a2,...,aV},若使用 a a a来对样本集 D D D进行划分,则会产生 V V V个分支节点,其中第 v v v个分支节点包含了 D D D中所有在特征 a a a上取值为 a v a^v av的样本,记为 D v D^v Dv。我们可以根据(式1)计算出 D v D^v Dv的信息熵,再考虑到不同的分支节点所包含的样本数不同,给分支节点赋予权重 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣,即样本数越多的分支节点的影响越大,于是可计算出用特征 a a a对样本集 D D D进行划分所获得的“信息增益” G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) ( 式 2 ) Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)\space\space\space(式2) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv) (式2)一般而言,信息增益越大,则意味着使用特征 a a a来进行划分所获得的“纯度提升”越大。因此,我们可以用信息增益来进行决策树的划分特征选择。即 a ∗ = arg max a ∈ A G a i n ( D , a ) a_*=\arg \max \limits_{a \in A} Gain(D,a) a∗=arga∈AmaxGain(D,a)。
由(式2)可知,信息增益准则对可取数值数目较多的特征有所偏好。通过ID3算法生成的是一颗多叉树。
缺点:
- 无剪枝策略,容易过拟合;
- 只能用于处理离散分布的特征并且只能处理分类问题;
- 没有考虑缺失值。
- 信息增益准则对可取数值数目较多的特征有所偏好
2、C4.5
C4.5决策树学习算法同样是由罗斯·昆兰(J. Ross Quinlan)在1993年发表。主要是为了解决“信息增益准则对可取数值数目较多的特征有所偏好”可能带来不利影响的问题。
C4.5使用“信息增益率”来选择最优划分特征,采用和(式2)相同的符合表示增益率:
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
(
式
3
)
Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}\space\space\space(式3)
Gain_ratio(D,a)=IV(a)Gain(D,a) (式3)其中
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣当特征
a
a
a的可能取值数目越多(即
V
V
V越大),则
I
V
(
a
)
IV(a)
IV(a)的值通常会越大。
由(式3)可知,增益率准则对可能取值数目较少的特征有所偏好。为了解决这个问题,C4.5算法并没有直接选择增益率最大的候选划分特征,而是使用了一个启发式:先从候选划分特征中找出信息增益高于平均水平的特征,然后再从中选择增益率最高的。
C4.5算法不但改进了划分特征的算法,同时还引入了剪枝策略,以防止过拟合,以及对连续值和缺失值进行了处理。
剪枝策略
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。决策树剪枝的基本策略有“预剪枝”和“后剪枝”两种。
“预剪枝”:在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点。
停止划分节点的主要方法有:
- 节点内数据样本低于某一阈值;
- 节点划分前准确率比划分后准确率高;
“预剪枝”使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但另一方面“预剪枝”基于“贪心”策略禁止这些分支展开,给“预剪枝”决策树带来了欠拟合的风险
“后剪枝”:先从训练集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。
“后剪枝”决策树通常比“预剪枝”决策树保留了更多的分支,一般情况下,“后剪枝”的欠拟合风险很小,泛化性能往往优于“预剪枝”决策树,但“后剪枝”是在生成完整的决策树后进行的,并且要自底向上地对树中的所有非叶节点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
C4.5对连续特征的处理主要是采用二分法。给定样本集 D D D和连续特征 a a a,假定 a a a在 D D D上出现了 n n n个不同的取值,将这些值从小到大进行排序,记为 { a 1 , a 2 , . . . , a n } \{a^1,a^2,...,a^n\} {a1,a2,...,an}。基于划分点 t t t可将 D D D分为子集 D t − D_t^- Dt−和 D t + D_t^+ Dt+,其中 D t − D_t^- Dt−包含那些在特征 a a a上取值不大于 t t t的样本。而 D t + D_t^+ Dt+则包含那些在特征 a a a上取值大于 t t t的样本。显然,对相邻的特征取值 a i a^i ai和 a i + 1 a^{i+1} ai+1来说, t t t在区间 [ a i , a i + 1 ) [a^i,a^{i+1}) [ai,ai+1)中取任意值所产生的划分结果相同。因此,对连续特征 a a a,我们可考察包含 n − 1 n-1 n−1个元素的候选划分点集合 T a = { a i + a i + 1 2 ∣ 1 ⩽ i ⩽ n − 1 } T_a=\{\frac{a^i+a^{i+1}}{2}|1\leqslant i \leqslant n-1\} Ta={2ai+ai+1∣1⩽i⩽n−1}即把区间 [ a i , a i + 1 ) [a^i,a^{i+1}) [ai,ai+1)的中位点 a i + a i + 1 2 \frac{a^i+a^{i+1}}{2} 2ai+ai+1作为候选划分点。然后,我们就可像离散特征值一样来考察这些划分点,选取最优的划分点进行样本集合的划分: G a i n ( D , a ) = max t ∈ T a G a i n ( D , a , t ) Gain(D,a)=\max_{t\in T_a}Gain(D,a,t) Gain(D,a)=t∈TamaxGain(D,a,t) = max t ∈ T a E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) =\max_{t\in T_a} Ent(D) -\sum_{\lambda \in\{-,+\}}\frac{|D_t^{\lambda}|}{|D|}Ent(D_t^{\lambda}) =t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)其中 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)是样本集 D D D基于划分点 t t t二分后的信息增益,于是,我们就可选择使 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)最大化的划分点。
C4.5对缺失值的处理主要是针对解决两个问题:
- 如何在特征值缺失的情况下进行划分属性选择?
- 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
对于第一个问题:主要是通过对具有缺失值的特征,采用没有缺失样本子集所占比重来折算。
对于第二个问题:主要是通过将同一个样本以不同的概率划入到不同的子节点中去。
缺点:
- C4.5也是一颗多叉树
- 只能用于分类
3、CART(Classification and Regression Tree)
CART是一颗二叉树,相对于ID3和C4.5提高了生成决策树的效率。
CART决策树使用“基尼指数”来选择划分特征,对于数据集
D
D
D的“纯度”可用基尼指数度量:
G
i
n
i
(
D
)
=
∑
k
=
1
K
∑
k
′
≠
k
p
k
p
k
′
Gini(D)=\sum_{k=1}^K\sum_{k'\not =k}p_kp_{k'}
Gini(D)=k=1∑Kk′=k∑pkpk′
=
1
−
∑
k
=
1
K
p
k
2
=1-\sum_{k=1}^Kp_k^2
=1−k=1∑Kpk2直观来说,
G
i
n
i
(
D
)
Gini(D)
Gini(D)反映了从数据集
D
D
D中随机抽取两个样本,其类别标记不一致的概率。因此,
G
i
n
i
(
D
)
Gini(D)
Gini(D)越小,则数据集
D
D
D的“纯度”越高。则特征
a
a
a的基指系数为:
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini\_index(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)于是,我们在候选特征集合
A
A
A中,选择那个使得划分后基尼指数最小的特征作为最优划分特征,即
a
∗
=
arg
min
a
∈
A
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
a_*=\arg \min\limits_{a\in A}Gini\_index(D,a)
a∗=arga∈AminGini_index(D,a)。
CART决策树不仅可以应用于分类,还可以应用于回归。在回归模型中,则使用均方误差和来判断最优划分特征。对于划分特征 a a a,对应的任意划分点 s s s两边划分成的数据集 D 1 D_1 D1和 D 2 D_2 D2,求出使 D 1 D_1 D1和 D 2 D_2 D2各自集合的均方误差最小,同时 D 1 D_1 D1和 D 2 D_2 D2的均方误差之和最小所对应的特征和特征值划分点: min a , s [ min c 1 ∑ x i ∈ D 1 ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ D 2 ( y i − c 2 ) 2 ] \min_{a,s}[\min_{c_1}\sum_{x_i\in D_1}(y_i-c_1)^2+\min_{c_2}\sum_{x_i\in D_2}(y_i-c_2)^2] a,smin[c1minxi∈D1∑(yi−c1)2+c2minxi∈D2∑(yi−c2)2]其中, c 1 c_1 c1为 D 1 D_1 D1 数据集的样本输出均值, c 2 c_2 c2为 D 2 D_2 D2 数据集的样本输出均值.
回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
4、总结
最后通过总结的方式对比下 ID3、C4.5 和 CART 三者之间的差异。
- 划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。
- 使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;
- 样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;
- 样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;
剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。
参考文献:
- 《机器学习》周志华
- https://zhuanlan.zhihu.com/p/85731206