[本文内容参考周志华《机器学习》]
前两篇博客分别介绍了决策树的概念【十五】机器学习之路——决策树(1)和决策树的三种算法【十六】机器学习之路——决策树算法(2),今天讲一下决策树的剪枝。
我们种树的时候给树剪枝是为了树长的更加美观,而给决策树剪枝是为了解决决策树中”过拟合”的问题。决策树学习中,为了尽可能正确的分类样本数据,节点划分过程将不断重复,有时候会造成分支过多,这时就可能因为训练样本”学的太好了”,导致过拟合的情况。因此这个时候可以通过主动去掉一些分支来降低过拟合的风险。举一个简单的例子:
上图中红色的点代表”慢速”,蓝色的点代表”快速”,具体细节不用纠结,我们需要利用决策树方式将图中的点进行分类,左图和右图对比发现,左图中出现了”过拟合”的情况,有一些长条和多出来的部分虽然更好的拟合了蓝色和红色的点,但是明显不是我们想要的结果,反而右图更符合我们的预期。因此咱们就需要通过剪枝,将左图中多出来的部分消灭掉。
决策树的剪枝分为两部分:
预剪枝(prepruning)
后剪枝(post-pruning)
预剪枝
预剪枝是指在决策树生成过程中,对每个节点划分前进行估计,若当前节点的划分不能带来决策树泛化(generalize)性能提升,则停止划分并将当前节点标记为叶节点。
提升泛化性能,其实就是提升准确率的问题。我们将数据集分为训练集、验证集(关于训练集、验证集、测试集的划分方法请参考本人之前的博客机器学习之路——训练集、测试集及如何划分)。在每个节点划分前,如果将这个节点作为叶节点停止划分,通过验证集代入求分类准确率