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

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

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

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

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

根据上述的数据,我们可以生成下面这棵决策树:

现在我们开始后剪枝的过程,为了方便描述,我将各个节点标上了序号。

后剪枝,顾名思义就是从决策树的末端往上检查,首先我们来看6号节点,具体操作就是先将6号节点整个去掉,再来计算模型在验证集上的精度

这棵决策树去掉了6号节点之后长这样,我们可以得到暂时的决策树:

我们再用这棵决策树去判断我们的验证集,得到下面的结果:

黄,红,绿分别是KDA,MVP/SVP次数,单排胜率节点筛选的结果,最终{15}被判定为了高手,{1,6,8,11,14}被判定为了非高手,从而得到这棵决策树的正确率:

得到正确率之后有2种情况:

1.剪枝之后的决策树正确率 > 剪枝之前的决策树正确率,该节点被舍弃,下图的决策树为新的决策树;

1.剪枝之后的决策树正确率 < 剪枝之前的决策树正确率,该节点被保留,决策树不变;

检查完一个结点之后再接着往上检查,直到所有节点检查完毕为止。