本文主要是西瓜书里关于决策树剪枝内容的笔记和一些自己的理解。
ps:正在学习,如有错误欢迎指出
一、剪枝的目的
剪枝的目的是为了防止过拟合。
二、剪枝类型
1.预剪枝
预剪枝:在决策树生成过程中,对每个结点在划分先进行估计。
若当前结点的划分能带来决策树泛化性能提升,则划分;
若当前结点的划分不能带来决策树泛化性能提升,则不划分并将当前结点标记为叶结点。
如何判断决策树泛化性能是否提升?可以使用一些性能评估方法。
西瓜书中,采用留出法。
由信息增益结果知,选取“脐部”这一特征作为结点,将会有三个分支。
是否要进行划分?对划分前后的泛化性能进行评估。
第一步:是否选择“脐部”为根结点进行划分?
(1)不进行划分:该结点被标记为叶结点,其类别标记为训练样例最多的类别。
划分前,所有样例集中在根结点:训练集中正类和负类都是5例。
我们选择将这个叶结点标记为“好瓜”,即不管“脐部”等其他属性取值如何,分类结果都为“好瓜”。
用验证集对单结点决策树进行评估:
由上图知,验证集中有3个样例分类正确,4个样例分类错误。验证集精度为100%=42.9%。
(2)进行划分:基于信息增益,挑选出属性“脐部”,使用“脐部”进行划分。
此时,验证集精度为x100 %=71.4%>42.9%。因此,用“脐部”进行划分。
第二步:是否对结点②、③、④进行划分?
1.是否对结点②进行划分?
(1)划分前,验证集精度为71.4%。
(2)进行划分:基于信息增益,挑选出属性“色泽”,使用“色泽”进行划分。
用验证集对划分结果进行评估:
此时,验证集精度为57.1%<71.4%,于是预剪枝策略将禁止结点②进行划分。
2.是否对结点③进行划分?
(1)划分前,验证集精度为71.4%。
(2)进行划分:基于信息增益,挑选出属性“根蒂”,使用“根蒂”进行划分。
用验证集对划分结果进行评估:
此时,验证集精度仍为71.4%。这个划分不能提升验证集精度,于是,预剪枝策略禁止结点③被划分。
3.是否对结点④进行划分?
结点④,其所含训练样例全部属于同一类,不再进行划分。
最终,预剪枝后生成如下图所示的仅有一层划分的决策树。
2.后剪枝
后剪枝:后剪枝先从训练集生成一棵完整决策树。
此时,验证集精度为42.9%。
第一步:首先考察结点⑥,把结点⑥替换为叶结点。
替换后的叶结点包含编号为{7,15}的训练样本,于是,该叶结点的类别标记为“好瓜”。
用验证集进行评估:
此时决策树的验证集精度提高至57.1%。于是,后剪枝策略决定剪枝。
第二步:考察结点⑤,若将其领衔的子树替换为叶结点。
替换后的叶结点包含编号为{6,7,15}的训练样本,叶结点类别标记为“好瓜”。
此时决策树验证集精度仍为57.1%。于是可以不进行剪枝。
以下步骤同理,不再详细展示。
第三步:考察结点②,若将其领衔的子树替换为叶结点。
替换后的叶结点包含编号为{1,2,3,14}的训练样本,叶结点类别标记为“好瓜”。
此时决策树验证集精度提升至71.4%。于是,后剪枝策略执行剪枝。
第四步:考察结点③,若将其领衔的子树替换为叶结点。
替换后的叶结点包含编号为{6,7,15,17}的训练样本,叶结点类别标记为“好瓜”。
此时决策树验证集精度仍为71.4%。于是,可以不进行剪枝。
第五步:考察结点①,若将其领衔的子树替换为叶结点。
所有样例集中在根结点:训练集中正类和负类都是5例。叶结点类别标记为“好瓜”。
此时决策树验证集精度仍为42.9%<71.4%,于是,不进行剪枝。
最终,后剪枝后生成如下图所示的决策树。
三、总结
预剪枝:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
优点:
1.降低了过拟合的风险。
2.减少了决策树的训练时间开销和测试时间开销。
缺点:
1.有欠拟合的风险
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
优点:
1.欠拟合风险很小。
2.泛化性能往往优于预剪枝决策树。
缺点:
1.其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
参考资料
《机器学习》周志华