老饼讲解-机器学习 机器学习 神经网络 深度学习
机器学习入门
1.学前解惑
2.第一课:初探模型
3.第二课:逻辑回归与梯度下降
4.第三课:决策树
5.第四课:逻辑回归与决策树补充
6.第五课:常见的其它算法
7.第六课:综合应用

【原理】CART决策树的剪枝

作者 : 老饼 发表日期 : 2022-06-26 03:42:05 更新日期 : 2024-03-12 01:00:10
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com


为了防止决策树过拟合,决策树算法配套了预剪枝和后剪枝方法来减少叶子节点,

通过剪枝,使模型更简单,在一定程度上防止过拟合问题

本文主要介绍CART决策树的剪枝方法和剪枝思路



  01.  CART决策树的过拟合与剪枝  




本节介绍CART决策树的过拟合和剪枝两个概念分别是什么




     什么是决策树的过拟合     


决策树的完整构建往往在历史样本(用于建树的样本)上有很好的区分度,
但在新样本上,却预测效果很差
这很可能是因为树分得过细,导致过拟合
 过拟合是指模型过分拟合历史数据,导致模型“狭隘”,对新数据兼容性不好



      什么是决策树的剪枝     


为了预防树过度生长导致过拟合,
决策树算法配套了预剪枝和后剪枝方法,
通过减少叶子节点,使模型更加简单,
这样可以在一定程度上防止过拟合,






    02.  CART决策树的预剪枝    



本节介绍CART决策树的预剪枝概念和如何预剪枝



     CART决策树的预剪枝      


   什么是预剪枝   
预剪枝则指建树过程中,达到一定条件就停止生长了,
换句话说,就是给成为叶子设立更多的条件,
例如,深度到一定程度,或者节点样本过少等等
 预剪枝与其说是剪枝,其实不是真的剪,连长都给它机会没长出来
   如何预剪枝   
 
预剪枝的使用很简单,就是构建一棵决策树前,设定更严格的生长参数就可以了
在sklearn的决策树中,
可以通过设置min_samples_leaf、 min_samples_split、max_depth等参数来进行预剪枝
详细可见《sklearn决策树预剪枝》       






  03.  CART决策树后剪枝与CCP剪枝法  




本节介绍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则是根据节点编号,直接调用剪枝接口对节点裁剪




以上就是CART决策树的剪枝原理入门部分的内容了

具体的使用及更深入的原理见下述栏目

👉《老饼讲解-机器学习-算法原理》






 End 





联系老饼