本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对于有监督学习我们往往需要考虑其泛化能力,我们不希望模型过于依赖训练数据,而丧失对测试数据最基本的泛化能力。这种泛化能力的缺失在数据分析中被称为过拟合。决策树也会有过拟合发生,在样本量一定的情况下,决策树超过一定规模,训练阶段错误率会逐渐减小(错误率参考混淆矩阵),然而测试阶段错误率却越来越大。
目前,解决过拟合主要手段是决策树剪枝。决策树剪枝分为两种,一种是预剪枝,一种是后剪枝。它们都是通过控制决策树规模的方式来解决过拟合,只不过方法实施的时间和方式有所不同。预剪枝偏向过拟合的预防,它是在生成决策树时,阻值某些节点的生长来实现预防过拟合发生。而后剪枝是在决策树生成后,根据分类错误率、复杂度、最小树原则或分类规则对决策树进行修剪的。下面详细阐述这两种方法的详细流程以及优缺点。
1. 预剪枝:
预剪枝方法实际上是对决策树停止标准(问学生是什么? )的修改。在原始的ID3算法中,节点分割终止是由节点中的实例属于同一类来实现的。对于包含较少实例的节点,可能被分割后每个节点所包含的样例很少,甚至为0。为了避免这种情况,我们事先设置一个生长停止阈值stop_growth。当由一个节点分割导致的最大信息增益(注意是对剩余属性一个个计算找出最大信息增益)小于stop_growth时,就把该节点看作是一个叶子节点。
缺点:
因为选择合适的阈值stop_growth十分困难。如果阈值设置过大,节点在熵依然很高时就停止分割了,造成决策树提前停止生长,导致决策树过小,分类的错误率过高。并且这样缺陷是无法完全避免的,只能相对改善。因为其阈值设定的主观性决定了其大小设置严重依赖分析师个人经验。鉴于这种状况,我个人认为预剪枝是一种理论上简单,但实际效果比较差的方法。
2. 后剪枝:
后剪枝是指在决策树生长完成之后再进行剪枝的过程。后剪枝的四个原则:
-
减少分类错误修剪。使用独立的剪枝集估计剪枝前后的分类错误率,基于此剪枝。
-
最小代价与复杂性折中的剪枝。对剪枝后的树综合评价错误率和复杂性。决定是否剪枝。
-
最小描述长度准则。最简单的树就是最好的树。对决策树进行编码,通过剪枝得到编码最小的树。
-
规则后剪枝。将训练完的决策树转换成规则,通过删除不会降低估计精度的前提条件修剪每一条规则。
这里介绍三种后剪枝方案: