python决策树剪枝_决策树及其剪枝原理
后剪枝算法
后剪枝算法有很多种,这里简要总结如下:
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决策树剪枝_决策树及其剪枝原理相关推荐
- python决策树剪枝_决策树剪枝问题python代码
决策树在生长过程中有可能长得过于茂盛,对训练集学习的很好,但对新的数据集的预测效果不好,即过拟合,此时生成的模型泛化能力较差.因此,我们需要对决策树进行剪枝,使得生成的模型具有较强的泛化能力. 为了检 ...
- python决策树剪枝_决策树剪枝算法的python实现方法详解
python 决策树怎样修剪枝 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种.预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生"爱已不在,却还 ...
- python决策树剪枝_决策树剪枝的方法与必要性
1 决策树剪枝的必要性 本文讨论的决策树主要是基于ID3算法实现的离散决策树生成.ID3算法的基本思想是贪心算法,采用自上而下的分而治之的方法构造决策树.首先检测训练数据集的所有特征,选择信息增益最大 ...
- python实现决策树归纳_决策树【python实现】
决策树思维导图.jpg 0.周董歌词中的决策树 为什麼 别人在那看漫画 我却在学画画 对著钢琴说话 别人在玩游戏 我却靠在墙壁背我的ABC 拿王牌谈个恋爱 而我不想被你教坏 还是听妈妈的话吧 晚点再恋 ...
- mysql可以做决策树吗_决策树 - stream886 - 博客园
参考资料 决策树 决策树是一种运用概率与图论中的树对决策中的不同方案进行比较,从而获得最优方案的风险型决策方法. 决策树学习三步骤: 特征选择 决策树的生成 决策树的剪枝 常用的决策树算法有ID3,C ...
- sklearn 决策树例子_决策树--规则挖掘应用
本次主要简单介绍下决策树在风控规则中的简单应用,让读者快速入门.在后续的文章中,会逐一介绍决策树的各种算法原理,如信息增益.ID3算法.C4.5算法.C5.0算法等, 希望感兴趣的朋友可以关注下. 前 ...
- 二叉树剪枝_决策树,生成剪枝,CART算法
决策树 1. 原理 1.1 模型简介 决策树是一种基本的回归和分类算法.在分类问题中,可以认为是一系列 if-then 规则的几何.决策树学通常包括三个步骤:特征选择,决策树的生成, 决策树的修剪. ...
- 决策树原理实例(python代码实现)_决策树原理实例(python代码实现)
决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种.看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉"亲 ...
- python建模 决策_决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:...
决策树python建模中的坑 代码 #coding=utf-8 from sklearn.feature_extraction import DictVectorizer import csv fro ...
最新文章
- GreenDao使用注意事项
- h5首页加载慢_H5网站好不好?
- Build Tools三问
- Django入门:DoesNotExist: User matching query does not exist.
- C语言、嵌入式中几个非常实用的宏技巧
- robot framework集成Jenkins环境
- javascript的回调函数 同步 异步
- JAVA编写的火车票售票系统
- 西安工程大学计算机是几本专业,西安工程大学专业介绍
- 20155336虎光元 Exp1PC平台逆向破解及Bof基础实践
- 图像分割各种评测标准
- windows批处理bat常用指令
- ps图像放大后变清晰和文字模糊变清晰
- SQL排序(升序,降序)
- Field not found; typically this occurs with arrays which are not mapped as single value
- IT程序员的抉择:我要离开帝都了
- linux项目部署、Nginx详解
- BOM(材料清单)整理及文件格式说明
- Idea配置与项目导入(Java 与 Python 学习通法)
- PyQt5制作一个爬虫小工具,获取某网上市公司的财务数据可视化
热门文章
- 在阿里云搭建CENTOS7系统以及图形界面
- 透过四款商用的 IoT 产品解析 UX 设计本质
- 字符变量 单引号 c语言,【C】 14_单引号和双引号
- 【NOJ1326】【算法实验三】推箱子
- /proc文件系统的特点和/proc文件的说明
- 直播助企业玩转企业直播营销
- 常见的几种浏览器问题以及解决方案
- Word控件Spire.Doc 转换教程(二十八):将 Word 转换为 PCL
- 万 兴 神 剪手 Wondershare Filmora v9.3.6.2 简体中文版下载和安装使用说明
- [codeforces 1327E] Count The Blocks 打表找规律+根据规律找公式+优化公式