在有限的样本下,如果决策树生长得很大,树枝很多,那么就有可能导致有限样本中对采样的偶然性或噪声比较敏感,导致过学习,从而范化能力差。
首先来看一幅图,如图:
上图是一次测试中用ID3算法得到的有关决策树的大小与在训练数据和测试数据上的正确率的关系,不难看出,出现了过学习,如果样本不足够多,随着决策树达到一定规模大小,训练数据上的正确率会不断增加,而在测试数据上的正确率不增反降,因此像这种只要生长到叶节点只包含单一类样本的方法来构建决策树的算法是存在瑕疵的,我们的目标是要兼顾训练数据上的正确率和测试数据上的正确率,跟所有模式识别问题一样,必须要保证良好的泛化能力。
在决策树算法中,控制算法的范化性能,防止出现过学习的主要手段,是控制决策树生成算法的终止条件和对决策树进行剪枝,而控制决策树大小的办法就是剪枝(Prunning),主要有两种策略:先剪枝和后剪枝。
先剪枝
定义:控制决策树的生长;在决策树生长过程中决定某节点是否需要继续分枝还是直接作为叶节点,一旦某节点被判断为叶节点后,该枝就停止生长。
判断决策树何时停止生长的方法:
1)数据划分法:将样本数据分成训练样本和测试样本,先在训练样本上生长决策树,直到才测试样本上的正确率达到最大就停止生长。
缺点:由于要划分数据样本,所以训练时只利用了总样本中的一部分,没有充分利用数据信息,因此需要多次交叉验证;
2)阈值法:设置一个合适的信息增益(熵不纯度的较小幅度)阈值,当发现当前某一节点得到的信息增益小于阈值,就停止生长。
缺点:阈值的选取不太好把握;
3)信息增益的统计显著性分析:对已有节点得到的所有信息增益统计出分布,如果再继续生长得到的信息增益与该分部相比显著性不明显,就停止生长;
缺点:不直观,显著性不太好考察,可考虑用卡方分布;
后剪枝
定义:后剪枝就是等到决策树生长完成后再进行优化和修剪,主要就是对一些分枝进行合并;从叶节点出发,如果去掉具有相同父节点的叶节点后不会导致熵不纯度的明显增加,就执行消除,并以其父节点作为新的叶节点,这样不断的回溯,直到没有再适合合并的分枝为止。
后剪枝对分枝进行合并过程中,往往有以下三种原则可遵循:
1)减少分类错误率的修剪法:估计剪枝前后的分类错误率变化,基于错误率来判断是否应该合并分枝;
2)最小代价与复杂度的平衡:同时兼顾考虑两个指标:剪枝后错误率增加和复杂度降低,两者之间折中考虑,最后得到一个综合性能的决策树;
3)最小描述长度准则:基于”简简单单就是幸福“的想法;先对决策树编码,再剪枝得到编码最短的决策树;
总结
先剪枝与后剪枝的选择需要结合具体问题来具体分析。先剪枝看起来更加直接,但它的困难在于需要判断何时应该停止生长决策树,由于决策树的生长过程中,每一步都只以当前准则最优为依据(是一种贪心算法),没有全局观,且不会回溯,因此先剪枝缺乏对最后效果的考虑,可能会导致生长提前终止。对于后剪枝(实践中运用的较为成功,C4.5和CART中都用到了后剪枝进行修剪),一来充分利用所有的样本信息,二来考虑到全局(补偿机制),缺陷是样本数据足够大时增加比较重的计算负担,因此实践中也可以将二者进行结合。