决策树剪枝算法

  • 引言
  • 1、算法目的
  • 2、算法基本思路:
  • 3、决策树损失函数
  • 4、剪枝类型:
    • 4.1 预剪枝
    • 4.2 后剪枝
    • 4.3 两种剪枝策略对比

引言

\quad \quad在决策树、ID3、C4.5算法一文中,简单地介绍了决策树模型,以及决策树生成算法:决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即容易出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化,下面来探讨以下决策树剪枝算法。

1、算法目的

\quad \quad决策树的剪枝是为了简化决策树模型,避免过拟合。

  • 同样层数的决策树,叶结点的个数越多就越复杂;同样的叶结点个数的决策树,层数越多越复杂。
  • 剪枝前相比于剪枝后,叶结点个数和层数只能更多或者其中一特征一样多,剪枝前必然更复杂。
  • 层数越多,叶结点越多,分的越细致,对训练数据分的也越深,越容易过拟合,导致对测试数据预测时反而效果差,泛化能力差。

2、算法基本思路:

\quad \quad剪去决策树模型中的一些子树或者叶结点,并将其上层的根结点作为新的叶结点,从而减少了叶结点甚至减少了层数,降低了决策树复杂度。

\quad \quad决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。

3、决策树损失函数

\quad \quad设树T的叶节点个数为∣T∣|T|∣T∣,t是树T的叶节点,该叶节点有NtN_tNt​个样本点,其中k类的样本点有NtkN_{tk}Ntk​个,k=1,2,...,Kk=1,2,...,Kk=1,2,...,K,Ht(T)H_t(T)Ht​(T)为叶节点t上的经验熵,α≥0\alpha\geq0α≥0为参数,则决策树学习的损失寒素可以定义为
Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|Cα​(T)=t=1∑∣T∣​Nt​Ht​(T)+α∣T∣

其中,经验熵为Ht(T)=−∑kNtkNtlogNtkNtH_t(T)=-\sum_{k}\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}Ht​(T)=−k∑​Nt​Ntk​​logNt​Ntk​​

  • 记C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklogNtkNtC(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}log\frac{N_{tk}}{N_t}C(T)=t=1∑∣T∣​Nt​Ht​(T)=−t=1∑∣T∣​k=1∑K​Ntk​logNt​Ntk​​
    则 Cα(T)=C(T)+α∣T∣C_\alpha(T)=C(T)+\alpha|T|Cα​(T)=C(T)+α∣T∣
  • C(T)C(T)C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度。
  • α∣T∣\alpha|T|α∣T∣是为了避免过拟合,给优化目标函数增加一个正则项,正则项包含模型的复杂度信息|T|。对于决策树来说,其叶结点的数量 ∣T∣ 越多就越复杂。参数 α\alphaα 控制了两者之间的影响程度。较大的 α\alphaα促使选择较简单的模型(树),较小的 α\alphaα 促使选择较复杂的模型(树)。
  • 上式定义的损失函数Cα(T)C_\alpha(T)Cα​(T)的极小化等价于正则化的极大似然估计。

\quad \quad剪枝,就是当α\alphaα确定时,选择损失函数最小的模型,即损失函数最小的子树。当α\alphaα确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡。

4、剪枝类型:

\quad \quad决策树的剪枝基本策略有 预剪枝 (Pre-Pruning) 和 后剪枝 (Post-Pruning) [Quinlan, 1933]。根据周志华老师《机器学习》一书中所描述是先对数据集划分成训练集和验证集,训练集用来决定树生成过程中每个结点划分所选择的属性;验证集在预剪枝中用于决定该结点是否有必要依据该属性进行展开,在后剪枝中用于判断该结点是否需要进行剪枝。

4.1 预剪枝

\quad \quad预剪枝是在决策树生成过程中,对树进行剪枝,提前结束树的分支生长。

加入预剪枝后的决策树生成流程图如下:

\quad \quad其中的核心思想就是,在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。

4.2 后剪枝

\quad \quad后剪枝是在决策树生长完成之后,对树进行剪枝,得到简化版的决策树。

\quad \quad对于后剪枝,周志华老师《机器学习》中述说如下:

后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。

李航《统计学习方法》中述说如下:

输入:生成算法产生的整个树T,参数α\alphaα
输出:修剪后的子树TαTαTα

  1. 计算每个结点的经验熵
  2. 递归地从树的叶结点向上回缩
    \quad设一组叶结点回缩到父结点之前与之后的整体树分别为TBT_BTB​和TAT_ATA​,其对应的损失函数值分别是Cα(TB)Cα(T_B)Cα(TB​)与Cα(TA)Cα(T_A)Cα(TA​),如果Cα(TA)≤Cα(TB)Cα(T_A)≤Cα(T_B)Cα(TA​)≤Cα(TB​)则进行剪枝,即将父结点变为新的叶结点。
  3. 返回(2),直至不能继续为止,得到损失函数最小的子树Tα

代码稍后更新

4.3 两种剪枝策略对比

  • 后剪枝决策树通常比预剪枝决策树保留了更多的分支;
  • 后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树;
  • 后剪枝决策树训练时间开销比未剪枝决策树和预剪枝决策树都要大的多。

参考资料:
https://blog.csdn.net/yujianmin1990/article/details/49864813
https://blog.csdn.net/ylhlly/article/details/93213633

机器学习笔记16——决策树剪枝算法原理及python实现案例相关推荐

  1. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  2. [吴恩达机器学习笔记]14降维3-4PCA算法原理

    14.降维 觉得有用的话,欢迎一起讨论相互学习~Follow Me 14.3主成分分析原理Proncipal Component Analysis Problem Formulation 主成分分析( ...

  3. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)

    原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行. 这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子 ...

  4. apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现

    关联规则Apriori算法 1.关联规则概述 关联规则算法是在一堆数据集中寻找数据之间的某种关联,通过该算法我们可以对数据集做关联分析--在大规模的数据中寻找有趣关系的任务.这些关系可以有两种形式:频 ...

  5. 决策树剪枝算法:REP/PEP/CCP算法

    一颗完全生长的决策树会面临一个严重的问题--过拟合,因此我们需要剪掉一些枝叶来提高决策树的泛化能力.即使不存在过拟合,如果样本数量和分类数量是一个海量的级别,也需要预剪枝,因为计算资源不足以支撑生成完 ...

  6. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  7. 机器学习,深度学习基础算法原理详解(图的搜索、交叉验证、PAC框架、VC-维(持续更新))

    机器学习,深度学习基础算法原理详解(图的搜索.交叉验证.PAC框架.VC-维.支持向量机.核方法(持续更新)) 机器学习,深度学习基础算法原理详解(数据结构部分(持续更新)) 文章目录 1. 图的搜索 ...

  8. 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)

    吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection) 对于异常检测算法,使用特征是至关重要的,下面谈谈 ...

  9. Python机器学习笔记:异常点检测算法——Isolation Forest

    Python机器学习笔记:异常点检测算法--Isolation Forest 参考文章: (1)Python机器学习笔记:异常点检测算法--Isolation Forest (2)https://ww ...

最新文章

  1. pthread_cond_broadcast相关
  2. 使用qwt作曲线图——有网格线背景的画法
  3. EXT中给时间控件设置默认值
  4. [vue] 说说你对vue的template编译的理解?
  5. 快去换电池!苹果召回6.3万台MacBook Pro 有你的吗?
  6. 2021深圳杯东三省建模
  7. Ubuntu20.04 设置虚拟内存
  8. 软件环境 硬件环境java,软件环境和硬件环境都指什么?
  9. 5000字干货 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
  10. 恒源云GPU登录Linux实例使用记录
  11. 区块链是什么通俗解释_区块链是什么?如何用一句话通俗解释区块链
  12. 使用MV制作最简单的游戏:我要做游戏(4)
  13. 小米 2021 秋招面试总结
  14. 上海Oracle用户组我的页面
  15. chromedriver与GOOGLE浏览器对应版本
  16. VMWare 绕过虚拟机检测
  17. 2022年国内外主流的10款Bug跟踪管理软件
  18. ad hoc是什么的简称_ad hoc是什么意思
  19. 《移动APP测试实战》学习笔记
  20. 满天星(HTML+CSS+JS)

热门文章

  1. php解压base64编码,php base64编码和urlencode
  2. mysql 1326_SQL Server 出现Error: 1326错误)问题解决方案
  3. android export apk,APKExport-APK导出
  4. python分支判断语句_python 分支语句 等值判断 逻辑运算符
  5. Zemax操作13--光纤耦合输出光束整形设计条形光斑
  6. python3基础18
  7. Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
  8. 农药化工企业设备管理制度参考-PreMaint推荐
  9. 数据挖掘从入门到绝望之数据-分词
  10. 『每周译Go』Google:12 条 Golang 最佳实践