本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
为了防止决策树过拟合,决策树算法配套了预剪枝和后剪枝方法来减少叶子节点,
通过剪枝,使模型更简单,在一定程度上防止过拟合问题
本文主要介绍CART决策树的剪枝方法和剪枝思路
本节介绍CART决策树的过拟合和剪枝两个概念分别是什么
什么是决策树的过拟合
决策树的完整构建往往在历史样本(用于建树的样本)上有很好的区分度,
但在新样本上,却预测效果很差
这很可能是因为树分得过细,导致过拟合
过拟合是指模型过分拟合历史数据,导致模型”狭隘“,对新数据兼容性不好
什么是决策树的剪枝
为了预防树过度生长导致过拟合,
决策树算法配套了预剪枝和后剪枝方法,
通过减少叶子节点,使模型更加简单,
这样可以在一定程度上防止过拟合,
本节介绍CART决策树的预剪枝概念和如何预剪枝
CART决策树的预剪枝
什么是预剪枝
预剪枝则指建树过程中,达到一定条件就停止生长了,
换句话说,就是给成为叶子设立更多的条件,
例如,深度到一定程度,或者节点样本过少等等
预剪枝与其说是剪枝,其实不是真的剪,连长都给它机会没长出来
如何预剪枝
预剪枝的使用很简单,
就是训练树前,
设定更严格的生长参数就可以了
本节介绍CART决策树的后剪枝概念,和CCP后剪枝法的思想与使用方法
什么是后剪枝
后剪枝就是我们直观理解中的“剪”枝了
在树完整构建完后,对一些过度生长的节点进行裁剪
后剪枝最经典的是CCP剪枝法
CCP剪枝法思想
CCP剪枝法全称为Cost Complexity Pruning代价复杂度剪枝法
CCP剪枝法的思想是,
构造一个综合树代价与树的复杂度的损失函数:
,
其中, 是一个待定系数, T 则代表叶子节点个数
然后求解,裁掉哪个节点,能让L最小,就裁哪个
这个求解并不难,
因为树节点并不多,就单纯的历遍,都能算出裁掉哪个节点最优
我们这里仅是简单介绍CCP的思想,具体细节不作详述
CPP后剪枝的使用
CCP后剪枝的使用一般先打印CCP路径,然后根据CCP路径自主剪枝
1、打印CCP路径
CCP路径一般包含三个信息:
(1) alpha 值
(2) alpha 值对应剪掉的节点编号
(3) 剪掉节点后树的Cost(代价,或者质量)
备注:代价的定义各个软件不一,sklearn用的是所有叶子的GINI值/熵值,matlab用的是判断错误的样本占比
2、根据CCP路径自主剪枝
在节点与代价之间自主权衡,
选择要裁剪的节点,进行剪枝
备注
剪枝的调用方式各个软件不一,
sklearn是通过直接设置alpha,重新训练决策树
而matlab则是根据节点编号,直接调用剪枝接口对节点裁剪
End