决策树
《统计学习方法》李航 第五章 学习总结
1、算法概述
首先从一个感性的角度大致了解一下决策树的分类过程:
定义:
分类决策树由结点和有向边组成,内部结点表示一个特征或属性,叶结点表示一个类。
构建:
开始,构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集都有一个在当前条件下最好的分类。
如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。
如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类,这就生成了一棵决策树。
生成的决策树可能会发生过拟合,对未知数据不能很好地泛化,因此需要对生成的决策树进行自下而上的剪枝,去掉过分细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
可以看出,整体的学习过程分为三个环节:特征选择、决策树生成、决策树剪枝。而关于这三个环节的描述中,出现了很多较为模糊的词语(由加粗斜体标出),例如:什么叫“最优特征”?什么又算是“当前条件下最好的分类”?这些模糊的地方就涉及到了具体采用的算法。了解了整体算法流程之后,就可以展开来看每一步的细节算法。
2、特征选择
特征选择在于选取对训练数据有分类能力的特征,通常的选择准则说是信息增益
或信息增益比
。
信息增益:
表示得知特征
X
X
X的信息而使得类
Y
Y
Y的信息的不确定性减少的程度。所以信息增益其实是越大越好的。计算公式为:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
H
(
D
)
H(D)
H(D)为数据集
D
D
D的经验熵,
H
(
D
∣
A
)
H(D|A)
H(D∣A)为特征
A
A
A给定条件下
D
D
D的经验条件熵。
信息增益比:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
(
D
)
g_R(D,A)=\frac{g(D,A)}{H(D)}
gR(D,A)=H(D)g(D,A)
根据信息增益准则的特征选择方法是:对训练数据集(或子集) D D D,计算其每个特则会那个的信息增益,并比较它们的大小,选择信息增益最大的特征。
3、决策树生成
决策树生成有两个经典算法:ID3算法
和C4.5算法
3.1 ID3算法
核心:在决策树各个结点上应用信息增益准则选择特征,递归构建决策树。
算法:
输入:训练数据集
D
D
D,特征集
A
A
A,阈值
ε
\varepsilon
ε;
输出:决策树
T
T
T
步骤:
3.2 C4.5算法
与ID3算法相比,C4.5只是将ID3的信息增益替换成了计算信息增益比,用信息增益比来选择特征。
4、决策树剪枝
剪枝原因:过于细化(深)的决策树对于训练数据的预测会很准确,但对于测试数据就不能很好地泛化,即出现了过拟合现象,因此需要剪枝,避免构建出过于复杂的决策树。
剪枝策略:往往通过极小化决策树整体的损失函数或代价函数来实现。
而这里的损失函数又是对数形式,损失函数的极小化就等价于正则化的极大似然估计,证明过程参考知乎.
所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。
剪枝算法:
输入:生成算法产生的整个树
T
T
T,参数
α
\alpha
α;
输出:修剪后的子树
T
α
T_\alpha
Tα.
过程:
(1)计算出每个结点的经验熵
(2)递归地从树的叶结点向上回缩。
设一组叶结点回缩到其父结点之前与之后的整体树分别为
T
B
T_B
TB与
T
A
T_A
TA,其对应的损失函数值分别是
C
α
(
T
B
)
C_\alpha(T_B)
Cα(TB)与
C
α
(
T
A
)
C_\alpha(T_A)
Cα(TA),如果
C
α
(
T
A
)
≤
C
α
(
T
B
)
C_\alpha(T_A) \leq C_\alpha(T_B)
Cα(TA)≤Cα(TB),则进行剪枝,即将父结点变成新的叶结点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树
T
α
T_\alpha
Tα.
5、CART算法
分类树与回归树模型是广泛应用的决策树学习方法,CART同样由特征选择、树的生成及剪枝组成,既可用于分类也可用于回归。
与之前所描述的算法不同的是,CART假设决策树是二叉树
,内部结点特征的取值为“是”或“否”。
CART的生成中特征选择算法:
- 回归树:用
平方误差最小化
准则 - 分类树:用
基尼指数最小化
准则
样本集合 D D D的基尼指数(CART)
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特征 A A A条件下集合 D D D的基尼指数:
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剪枝:
首先从生成算法产生的决策树
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};
然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。