后剪枝算法

后剪枝算法有很多种,这里简要总结如下:

Reduced-Error Pruning (REP,错误率降低剪枝)

这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它。对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,那么该子树就可以替换成叶子节点。该算法以bottom-up的方式遍历所有的子树,直至没有任何子树可以替换使得测试数据集的表现得以改进时,算法就可以终止。

Pessimistic Error Pruning (PEP,悲观剪枝)

PEP剪枝算法是在C4.5决策树算法中提出的, 把一颗子树(具有多个叶子节点)用一个叶子节点来替代(我研究了很多文章貌似就是用子树的根来代替)的话,比起REP剪枝法,它不需要一个单独的测试数据集。

CART分类回归树

基尼指数

分类问题,假设有K个类,样本点属于第k个类概率为pk,则概率分布的基尼指数定义为

对于二类分离,样本点属于第一个类的概率p,基尼指数

对于给定样本集合D,基尼指数

Ck是D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分。

(即在某一特征多个取值中,取其一个将其分为”是”其他为”不是”)

在特征A下,集合D的基尼指数定义为

基尼指数越大,样本集合不确定性越大。

CART树生成

(1) 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对于每个特征,每次取其中一个每个可能取得值,根据样本点对该值的测试结果为”是”或”否”将D分成2部分,并计算基尼指数.

(2) 在所有可能的特征,以及他们所有可能的切分点中,选择基尼指数最小的特征,该选择的特征为最优特征,该特征中的切分点为最优切分点,依照最优特征和最优切分点生成二叉树,并把训练数据集分配到子节点中。

(3)对两个子节点递归调用 (1) (2) ,直至满足停止条件

(4)生成CART决策树。

停止条件是样本个数小于预定阈值,或样本基尼指数小于预定阈值,或没有更多特征。

而ID3,C4.5在(1) (2)处与CART不同,ID3计算信息增益,C4.5计算信息增益比,首先求所有特征的信息增益或信息增益比,其中计算的数值是针对每一个特征,不将特征划分,而后以该特征将树延伸,在父节点确定的条件下,继续对子节点求所有特征的信息增益,后在划分。

CART则为求所有特征下的所有切分点后进行比较来划分。

在CART剪枝中

CART剪枝分为剪枝成子树序列,并通过交叉验证选取最优子树。

1.剪枝,成子树序列

在剪枝过程中,计算子树的损失函数:

其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数),|T|为子树的节点个数,a>=0为参数,Ca(T)为参数是a时子树T的整体损失,参数a权衡训练数据的拟合程度和模型的复杂度。

从上方a不是固定的时候,则整个损失函数由预测误差,a和模型复杂度共同决策,得出a大的时候,最优子树Ta偏小;当a小的时候,最优子树Ta的树较大,a=0时整体树最优,a->∞时,根结点组成的单节点树最优。

且认为不同的a值,可以确定一棵不同的最优化的树,或者说一个区间内的a值可以确定一颗最优化的树

即将a不断增大,利用a生成Ta这棵最优子树

为了得到所有的可能生成的最优化树{T0,T1,T2,…Tn},我们须从底向上,每次进行一次剪枝,通过得到的树认为是最优化树反推a

具体的,从整体树T0开始剪枝,对于T0的任意内部结点t,结点下有若干子节点,把t下的子树的若干叶节点称为Tt。

剪枝后(即t下的子树减去后,t变为叶节点)的损失函数

剪枝前的损失函数

注意这里的损失函数都是某个叶结点的损失函数,但为什么可以只求叶节点的损失函数,因为在上面的分析ID3,C4.5中得出了C(T)作为模型的预测误差的值,通过累加每一个叶结点(即T个叶结点)的预测误差而得出C(T)。因此单独求某个叶结点并没有什么问题。

现在就是求解a,a如何求解?

当a=0或充分小时,不等式

因为叶结点越多预测误差应该越小。

当a不断增大时,在某个a点有

当a再增大时,不等式反向。因此只要

Tt与t有相同的损失函数,而t结点少,因此t比Tt更可取,对Tt进行剪枝。

接下来对T0这棵整体树中的每一个结点t,计算

这个g(t)表示剪枝后的整体损失函数减少程度,实际上可以看为是否剪枝的阈值,对于某个结点当他的参数a=g(t)时,剪和不剪总体损失函数时一样的。如果a增大则不剪的整体损失函数就大于剪去的。即a大于g(t)该剪,剪后会使整体损失函数减小,而a小于g(t)则不剪,剪后会使整体损失函数增大。

这样a缓慢增大,随着a的增大,在一个区间内可确定一棵最优的剪枝树

而我们求每棵树,并认为他是最优剪枝树。

g(t)则代表每一棵树的a的最优区间内的最小值

即在T0中剪去g(t)最小的Tt,得到的子树为T1,同时将最小的g(t)设为a1,那

么T1为区间[a1,a2)的最优子树。

如此这样下去,将所有可能的树的情况剪枝直到根节点,在这个过程中则

会不断增加a,产生新的区间,最后a的所有可能的g(t)取值全部确定。

2.通过交叉验证选取最优子树

具体的利用独立的验证数据集,测试子树序列T0,T1,…Tn中各棵子树的平

方误差或基尼指数。平方误差或基尼指数最小的决策数被认为是最优决策

数,因为我们每确定一棵子树就会确定其参数a值,所以最优子树Tk确定,对应ak也确定,即得到最优决策数Ta。

在使用随机森林算法进行特征选择时,其中一种方法叫做OOB,即袋外误差:

python决策树剪枝_决策树及其剪枝原理相关推荐

  1. python决策树剪枝_决策树剪枝问题python代码

    决策树在生长过程中有可能长得过于茂盛,对训练集学习的很好,但对新的数据集的预测效果不好,即过拟合,此时生成的模型泛化能力较差.因此,我们需要对决策树进行剪枝,使得生成的模型具有较强的泛化能力. 为了检 ...

  2. python决策树剪枝_决策树剪枝算法的python实现方法详解

    python 决策树怎样修剪枝 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种.预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生"爱已不在,却还 ...

  3. python决策树剪枝_决策树剪枝的方法与必要性

    1 决策树剪枝的必要性 本文讨论的决策树主要是基于ID3算法实现的离散决策树生成.ID3算法的基本思想是贪心算法,采用自上而下的分而治之的方法构造决策树.首先检测训练数据集的所有特征,选择信息增益最大 ...

  4. python实现决策树归纳_决策树【python实现】

    决策树思维导图.jpg 0.周董歌词中的决策树 为什麼 别人在那看漫画 我却在学画画 对著钢琴说话 别人在玩游戏 我却靠在墙壁背我的ABC 拿王牌谈个恋爱 而我不想被你教坏 还是听妈妈的话吧 晚点再恋 ...

  5. mysql可以做决策树吗_决策树 - stream886 - 博客园

    参考资料 决策树 决策树是一种运用概率与图论中的树对决策中的不同方案进行比较,从而获得最优方案的风险型决策方法. 决策树学习三步骤: 特征选择 决策树的生成 决策树的剪枝 常用的决策树算法有ID3,C ...

  6. sklearn 决策树例子_决策树--规则挖掘应用

    本次主要简单介绍下决策树在风控规则中的简单应用,让读者快速入门.在后续的文章中,会逐一介绍决策树的各种算法原理,如信息增益.ID3算法.C4.5算法.C5.0算法等, 希望感兴趣的朋友可以关注下. 前 ...

  7. 二叉树剪枝_决策树,生成剪枝,CART算法

    决策树 1. 原理 1.1 模型简介 决策树是一种基本的回归和分类算法.在分类问题中,可以认为是一系列 if-then 规则的几何.决策树学通常包括三个步骤:特征选择,决策树的生成, 决策树的修剪. ...

  8. 决策树原理实例(python代码实现)_决策树原理实例(python代码实现)

    决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种.看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉"亲 ...

  9. python建模 决策_决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:...

    决策树python建模中的坑 代码 #coding=utf-8 from sklearn.feature_extraction import DictVectorizer import csv fro ...

最新文章

  1. P1991 无线通讯网
  2. 程序设计中的几种设计原则
  3. RhinoMock入门(3)——4种Mock类型
  4. Windows phone listbox动态添加列表项
  5. Why NoSQL?
  6. 豆瓣9.3的纪录片《西南联大》告诉你:大学学风应如是!
  7. python word 英语音标_(完整word版)英语音标大全,推荐文档
  8. 中山计算机辅助设计报考,中山模具设计与CNC数控编程专业
  9. 操作系统swap对redis的性能的影响以及解决方案
  10. 免疫算法的c语言,免疫算法(IA)
  11. c#WPF 扫雷游戏
  12. 现代数字图像处理作业----用维纳滤波器进行图像复原
  13. Altium Designer中修改敷铜与焊盘间的间距
  14. 我是如何面试iOS开发者的?
  15. 笔记本无法使用计算机,电脑Win快捷键失灵不能用的两种处理方法
  16. 随机计算(3)——Stochastic Circuit Synthesis by Cube Assignment
  17. 华硕打开桌面计算机没有反应,华硕window10电脑打开就这样,进不去桌面,怎么处理...
  18. idea设置Java类和方法注释模板
  19. 重定向与转发的使用和区别
  20. 【补题】Bin Packing Problem

热门文章

  1. 对Revit 2014如何使用FME Revit Exporter
  2. 数据库——python操作MySQL、修改表SQL语句、视图、触发器、存储过程、事务、流程控制、常见函数、索引
  3. oracle去重保留一条_oracle 去重,取新的一条数据展示
  4. 西克VT12T-2P430光电传感器
  5. 校招简历书写策略与投递要点
  6. 戴尔服务器系统备份还原工具,戴尔备份和恢复管理器官方版
  7. discuz用户账号被冻结解决办法
  8. 邓俊辉老师数据结构课程笔记
  9. 基于Vue+Springboot网上报销管理系统设计
  10. 线性代数基础概念与重要定义汇总