【十七】机器学习之路——决策树剪枝(3)

来源:互联网 发布:淘宝企业店铺需要资料 编辑:程序博客网 时间:2024/06/07 14:03

[本文内容参考周志华《机器学习》]

  前两篇博客分别介绍了决策树的概念【十五】机器学习之路——决策树(1)和决策树的三种算法【十六】机器学习之路——决策树算法(2),今天讲一下决策树的剪枝。

  我们种树的时候给树剪枝是为了树长的更加美观,而给决策树剪枝是为了解决决策树中”过拟合”的问题。决策树学习中,为了尽可能正确的分类样本数据,节点划分过程将不断重复,有时候会造成分支过多,这时就可能因为训练样本”学的太好了”,导致过拟合的情况。因此这个时候可以通过主动去掉一些分支来降低过拟合的风险。举一个简单的例子:


  上图中红色的点代表”慢速”,蓝色的点代表”快速”,具体细节不用纠结,我们需要利用决策树方式将图中的点进行分类,左图和右图对比发现,左图中出现了”过拟合”的情况,有一些长条和多出来的部分虽然更好的拟合了蓝色和红色的点,但是明显不是我们想要的结果,反而右图更符合我们的预期。因此咱们就需要通过剪枝,将左图中多出来的部分消灭掉。

  决策树的剪枝分为两部分:

  • 预剪枝(prepruning)

  • 后剪枝(post-pruning)

预剪枝

  预剪枝是指在决策树生成过程中,对每个节点划分前进行估计,若当前节点的划分不能带来决策树泛化(generalize)性能提升,则停止划分并将当前节点标记为叶节点。

  提升泛化性能,其实就是提升准确率的问题。我们将数据集分为训练集、验证集(关于训练集、验证集、测试集的划分方法请参考本人之前的博客机器学习之路——训练集、测试集及如何划分)。在每个节点划分前,如果将这个节点作为叶节点停止划分,通过验证集代入求分类准确率P1;如果将这个节点利用属性a进行划分,划分后通过验证集代入求分类准确率P2;比较两者大小,如果P1>P2,则进行剪枝,不再往下划分;如果P1<=P2,则继续根据属性a继续划分。

  • 预剪枝优点:

  预剪枝减少了决策树中一些不必要的分支,降低了”过拟合”的风险,同时显著减少了决策树训练的时间和测试时间开销。

  • 预剪枝缺点:

  有些分支虽然不能提升泛化性能,甚至有可能导致泛化性能暂时下降,但在其基础上进行的后续划分有可能会使决策树的性能提升,因此,预剪枝基于”贪心”(好就继续分支,不好就剪枝)的本质,可能会使决策树出现”欠拟合”的风险。

后剪枝

  后剪枝则是当我们构建好一个决策树后,自底而上地对非叶节点进行考察,如果将该节点替换为叶节点能提升决策树的泛化性能,则将该子树替换为叶节点。泛化性能的计算方法同预剪枝里的介绍。

  • 后剪枝优点:

  后剪枝决策树通常比预剪枝保留了更多的分支,欠拟合的风险较小,泛化性能往往优于预剪枝决策树。

  • 后剪枝缺点:

  后剪枝由于是在决策树生成之后进行的,其训练时间考校比未剪枝的决策树和预剪枝的决策树要大。

阅读全文
1 0