决策树算法比较: ID3、C4.5、CART
决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。其中基本树包括 ID3、C4.5、CART,本文将从思想、划分标准、剪枝策略,优缺点等方面介绍。
1. ID3
ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上:越是小型的决策树越优于大的决策树。
1.1 算法步骤:
- 初始化特征集合和数据集合;
- 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
- 更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
- 重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。
1.2 划分标准(信息增益):
信息增益: 表示得知特征 A 的信息而使得样本集合不确定性减少的程度。
信息熵:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
N
∣
p
k
l
o
g
2
p
k
Ent(D)=-\sum_{k=1}^{|N|}p_klog_2p_k
Ent(D)=−k=1∑∣N∣pklog2pk
p
k
p_k
pk表示当前样本集
D
D
D中,第k类样本所占的比例(
p
k
=
∣
C
k
∣
∣
D
∣
p_k=\frac{|C_k|}{|D|}
pk=∣D∣∣Ck∣),
N
N
N为样本类别数。
条件熵:
针对某个特征A,其取值有V个,对于数据集D的条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)为:
E
n
t
(
D
∣
A
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Ent(D|A)=\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)
Ent(D∣A)=v=1∑V∣D∣∣Dv∣Ent(Dv)
信息增益:
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
E
n
t
(
D
∣
A
)
Gain(D,a)=Ent(D)-Ent(D|A)
Gain(D,a)=Ent(D)−Ent(D∣A)
1.3 缺点
- ID3 没有剪枝策略,容易过拟合;
- 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
- 只能用于处理离散分布的特征;
- 没有考虑缺失值。
2. C4.5
C4.5 算法最大的特点是克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准。
2.1 改进
- 引入悲观剪枝策略进行后剪枝;
- 引入信息增益率作为划分标准;
- 将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
- 对于缺失值的处理可以分为两个子问题:
问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
解决办法:忽略。对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
解决办法:概率划分。将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
2.2 划分标准
信息增益率:
G
a
i
n
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
\begin{matrix} Gain_{ratio}(D, a)=\frac{Gain(D,a)}{IV(a)}\\ \\ IV(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} \end{matrix}
Gainratio(D,a)=IV(a)Gain(D,a)IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
其中,
I
V
(
a
)
IV(a)
IV(a)为属性a的固有值,属性a的可能取值数目越多,
I
V
(
a
)
IV(a)
IV(a)的值越大。
信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此 C4.5 并不是直接用增益率最大的特征进行划分,而是使用一个启发式方法:先从候选划分特征中找到信息增益高于平均值的特征,再从中选择增益率最高的。
2.3 剪枝策略
C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。
2.4 缺点
剪枝策略可以再优化;
- C4.5 用的是多叉树,用二叉树效率更高;
- C4.5 只能用于分类;
- C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
- C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
3. CART
ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。
3.1 算法步骤
- 分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
- 剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
- 树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。
3.2 改进
- C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
- C4.5 只能分类,CART 既可以分类也可以回归;
- CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
- CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
- CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。
3.3 划分标准(基尼指数)
数据集D的纯度可用基尼值来度量:
G
i
n
i
(
D
)
=
∑
k
=
1
N
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
N
p
k
2
\begin{matrix} Gini(D)= \sum_{k=1}^N \sum_{k' \neq k}p_kp_{k'} \\ \\ \qquad =1-\sum_{k=1}^Np_k^2 \end{matrix}
Gini(D)=∑k=1N∑k′=kpkpk′=1−∑k=1Npk2
属性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)
Giniindex(D,a)=v=1∑VDDvGini(Dv)
基尼指数反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。因此基尼指数越小,则数据集纯度越高。基尼指数偏向于特征值较多的特征,类似信息增益。基尼指数可以用来度量任何不均匀分布,是介于 0~1 之间的数,0 是完全相等,1 是完全不相等。
3.4 缺失值处理
- 特征值缺失的情况下进行划分特征的选择:
解决办法: CART 一开始严格要求分裂特征评估时只能使用在该特征上没有缺失值的那部分数据;
在后续版本中,CART 算法使用了一种惩罚机制来抑制提升值,从而反映出缺失值的影响(例如,如果一个特征在节点的 20% 的记录是缺失的,那么这个特征就会减少 20% 或者其他数值)。 - 选定该划分特征,模型对于缺失该特征值的样本该进行怎样处理?
解决办法:为树的每个节点都找到代理分裂器。在代理分裂器中,特征的分值必须超过默认规则的性能才有资格作为代理(即代理就是代替缺失值特征作为划分特征的特征),当 CART 树中遇到缺失值时,这个实例划分到左边还是右边是决定于其排名最高的代理,如果这个代理的值也缺失了,那么就使用排名第二的代理,以此类推,如果所有代理值都缺失,那么默认规则就是把样本划分到较大的那个子节点。代理分裂器可以确保无缺失训练数据上得到的树可以用来处理包含确实值的新数据。
3.5 剪枝策略
代价复杂度剪枝算法:
我们将一颗充分生长的树称为T0 ,希望减少树的大小来防止过拟化。但同时去掉一些节点后预测的误差可能会增大,那么如何达到这两个变量之间的平衡则是问题的关键。因此我们用一个变量α 来平衡,定义损失函数如下
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha|T|
Cα(T)=C(T)+α∣T∣
T为任意子树,|T|为子树T的叶子节点个数。
α是参数,权衡拟合程度与树的复杂度。
C(T)为预测误差,可以是平方误差也可以是基尼指数,C(T)衡量训练数据的拟合程度。
那么我们如何找到这个合适的α来使拟合程度与复杂度之间达到最好的平衡呢?准确的方法就是将α从0取到正无穷,对于每一个固定的α,我们都可以找到使得Cα(T)最小的最优子树T(α)。
当α很小的时候,T0 是这样的最优子树.
当α很大的时候,单独一个根节点就是最优子树。
尽管α的取值无限多,但是T0的子树是有限个。Tn是最后剩下的根结点,子树生成是根据前一个子树Ti,剪掉某个内部节点后,生成Ti+1。然后对这样的子树序列分别用测试集进行交叉验证,找到最优的那个子树作为我们的决策树。子树序列如下
T
0
>
T
1
>
T
2
>
T
3
>
⋯
>
T
n
T_0>T_1>T_2>T_3> \cdots >T_n
T0>T1>T2>T3>⋯>Tn
因此CART剪枝分为两部分,分别是生成子树序列和交叉验证。
4. 总结
划分标准的差异: 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 是通过代价复杂度剪枝。
名称 | 划分标准 | 剪枝策略 | 缺点 |
---|---|---|---|
ID3 | 信息增益 | 无 | 对特征多数目偏重;无法处理连续特征;没有考虑缺失值 |
C4.5 | 信息增益率 | 后剪枝 | 只能用于分类;运算效率低;适用于小数据集 |
CART | Gini系数 | 基于代价复杂度 |