本文摘录自《统计学习方法》-李航,第5.4结-决策树的剪枝
- 剪枝的定义:将已生成的树进行简化的过程称为剪枝。
- 剪枝的目的:决策树往往对训练数据的分类很准确,但是对未知的测试数据的分类却没有那么准确,即出现过拟合现象。
- 决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。设树T 的结点个数为|T |,t是T的叶结点,该叶结点上有 Nt 个样本点,其中k类的样本点有 Ntk 个,k=1,2,…,K, Ht(T) 为叶结点t上的经验熵, α⩾0 为参数,
- 则决策树损失的函数可以定义为:
Cα(T)=∑t=1|T|NtHt(T)+α|T| - 其中经验熵为:
Ht(T)=−∑kNtkNtlogNtkNt - 在损失函数中,将
Cα(T)
的第一项记为
C(T)
,这时有
Cα(T)=C(T)+α|T|
C(T) 表示模型对训练数据的预测误差,即模型和训练数据的拟合程度, |T| 表示模型复杂度,参数 α⩾0 控制两者之间的影响。 - 剪枝,就是当 α 确定时,选择损失函数最小的模型,即损失函数最小的子树。可以看出,决策树生成只考虑了通过提高信息增益对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
这里的经验熵反应了一个叶结点中的分类结果的混乱程度,经验熵越大,说明该叶结点所对应的分类结果越混乱,也就是说分类结果中包含了较多的类别,表明该分支的分类效果较差。所以,损失函数越大,说明模型的分类效果越差。决策树的剪枝通常分为两种,即预剪枝、后剪枝。预剪枝是在决策树生成过程中,对树进行剪枝,提前结束树的分支生长。后剪枝是在决策树生长完成之后,对树进行剪枝,得到简化版的决策树。
下面的算法,是后剪枝的实现步骤
输入:生成算法产生的整个树
T
,参数α
输出:修剪后的子树
1. 计算每个结点的经验熵.
2. 递归地从树的叶结点向上回缩 .
设一组叶结点回缩到父结点之前与之后的整体树分别为
TB
和
TA
,其对应的损失函数值分别是
Cα(TB)
与
Cα(TA)
,如果
Cα(TA)≤Cα(TB)
,即如果进行剪枝,损失函数变小,就进行剪枝,将父结点变为新的叶结点 .
3. 返回(2),直至不能继续为止,得到损失函数最小的子树
TA
.