随着决策树的生成,我们就需要验证一下这颗决策树的性能,假如说在验证集上模型的表现不是很好,那么我们就需要通过一定的办法对决策树进行优化。

其实在决策树的生成过程中我们可以发现,每生成一个叶子结点的过程其实就是局部最优的求解过程,但是,局部最优组成的整体就不一定是最优的,这点应该也是很好理解的,因此我们就需要通过特定的方法对整棵决策树求最优解。

一种方法是预剪枝,就是在决策树生成过程中,也就是叶子结点的产生过程中,会先预先计算一下加上该叶子结点前后会对目前决策树的性能产生怎样的影响,如果优化了性能就保留该叶子结点,如果该叶子结点没有优化甚至使性能下降了的话就丢弃该叶子结点。

还有一种是后剪枝,那就是在整个决策树生成之后,经过验证集的测试或者泛化的时候性能不好,需要提升决策树的性能,但是重新生成决策树的话成本太高,不太现实,因此就会通过特定的计算方法剪掉一些叶子结点从而提升整棵决策树的性能。

那么在这片文章中,我将分享决策树的预剪枝过程,同样以这个数据集为例进行分析,在这里我将使用留出法分配验证集

假设我们生成的第一个节点是KDA,那么KDA高于均值的都是高手,那么在没有这个节点的时候,决策树会将整个验证集判为高手,此时{1,6}判对,{8,11,14,15}判错,因此正确率是:

当加上KDA这个节点之后,会将验证集中的{6,8,11,14,15}判为高手{1}判为非高手,正确率是:

我们可以清楚的发现加上KDA这个节点之后,正确率从33.3%变成了16.7%,因此KDA节点不能保留

接着往下走,为了行文方便,我将伤害占比做为下一个叶子节点,高于均值是高手,低于均值是非高手。

在加入该叶子节点之前,正确率是16.7%,在加入该节点之后,验证集中的{1,15}判为高手{6,8,11,14}判为非高手,正确率是:

可以看到,正确率没有发生变化,因此不能添加该节点,决策树不发生变化。