(五)决策树剪枝
剪枝分为”预剪枝(prepruning)”和”后剪枝(postpruning)”两种. 预剪枝是指在决策树构建过程中, 对每个节点在划分前先进行估计, 若不能带来决策树泛化性能提升, 就停止划分, 并将当前结点标记为叶结点. 后剪枝则是先构成一颗完整的决策树, 再考察非叶结点. 若该结点对应的子树替换为叶结点能带来决策树泛化性能提升, 则将该字数替换为叶结点.(机器学习,周志华)。决策时剪枝可以减少过拟合,。
剪枝的具体操作就是,将数据集分为“训练集”和“测试集“,用训练集来生成决策树,用测试集的准确率,来测试每一个分支是否可以剪掉,剪掉后测试集的准确率上升,可以剪掉,反之剪掉后测试集的准确率下降,不可以剪掉。
用下面的情形来说明,”预剪枝“和”后剪枝“的区别。
假设有一个判断西瓜”好“和”坏“的数据集,标签是”好“或”坏“,特征有”脐部”、“色泽”、“纹理”、“触感”、“敲声”。一下数据集只是为了展示,随手编的,不必追求细节。
训练集(展示5条用于示例):
编号 | 脐部 | 色泽 | 纹理 | 触感 | 敲声 | label |
---|---|---|---|---|---|---|
1 | 凹陷 | 青绿 | 清晰 | 硬滑 | 混响 | 好瓜 |
2 | 凹陷 | 乌黑 | 模糊 | 硬滑 | 沉闷 | 好瓜 |
3 | 平坦 | 青绿 | 模糊 | 软粘 | 沉闷 | 好瓜 |
4 | 稍凹 | 乌黑 | 模糊 | 软粘 | 沉闷 | 坏瓜 |
5 | 稍凹 | 乌黑 | 清晰 | 软粘 | 混响 | 坏瓜 |
测试集(展示3条用于示例):
编号 | 脐部 | 色泽 | 纹理 | 触感 | 敲声 | label |
---|---|---|---|---|---|---|
1 | 平坦 | 乌黑 | 清晰 | 硬滑 | 混响 | 好瓜 |
2 | 稍凹 | 乌黑 | 清晰 | 硬滑 | 混响 | 好瓜 |
3 | 稍凹 | 青绿 | 模糊 | 硬滑 | 沉闷 | 坏瓜 |
预剪枝
预剪枝是在训练阶段,决策树的每个分支形成时,用测试集去的准确率去进行测试,来判断当前分支是否剪掉。
假设构建一个2层的决策树:
第一个节点按”脐部“进行分裂:
按“脐部”进行划分后测试集的准确率是提高的,所以按脐部的划分不剪枝。第一层决策树保留。下面考察第二层决策树的划分。
第二层树的,第一个分支是按色泽划分,划分后测试集的准确率降低了,这个分支要剪掉。第二个分支是按纹理划分的,划分后测试集的准确率是上升的,这个分支保留,第三个是叶子节点没有分支,不需要判断。所以最终,经过预剪枝的决策树是这个样子。
预剪枝的优缺点
优点
- 降低过拟合风险
- 显著减少训练时间和测试时间开销。
缺点
- 欠拟合风险 :有些分支的当前划分虽然不能提升泛化性能,但 在其基础上进行的后续划分却有可能显著提高性能。预剪枝基于 “ 贪心 ”本质禁止这些分支展开,带来了欠拟合风险。
后剪枝
后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。
考察“敲声”节点,剪枝后测试集的准确率上升,可以剪枝。
考察“触感”节点,剪枝后测试集准确率下降,不剪枝。
考察“纹理”节点,剪枝后测试集准确率下降,不剪枝。
考察“色泽”节点,剪枝后测试集准确率不变,不剪枝。
考察“脐部”节点,剪枝后测试集准确率下降,不剪枝。
至此,后剪枝的操作完成。
后剪枝的优缺点
优点
- 后剪枝比预剪枝保留了更多的分支, 欠拟合风险小 , 泛化性能往往优于预剪枝决策树
缺点
- 训练时间开销大 :后剪枝过程是在生成完全决策树 之后进行的,需要自底向上对所有非叶结点逐一计算