网站首页 > 技术文章 正文
一、剪枝算法决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
在决策树学习中将已生成的树进行简化的过程称为剪枝(Pruning)。具体地,剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。
决策树的剪枝往往通过极小化决策树整体的损失函数(Loss Function)或代价函数(Cost Function)来实现。设树的叶结点个数为||,t是树的叶结点,该叶结点有个样本点,其中k类的样本点有个,=1,2,?,,()为叶结t点上的经验熵,≥0为参数,则决策树学习的损失函数可以定义为:
()=∑=1||()+||其中经验熵为:
()=?∑log在损失函数中,记:
()=∑=1||()=?∑=1||∑=1log这时有:
()=()+||上式中,()表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,||表示模型复杂度,也称正则项,参数>0控制两者之间的影响。较大的促使选择较简单的模型(树),较小的促使选择较复杂的模型(树)。=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。
剪枝,就是当确定时,选择损失函数最小的模型,即损失函数最小的子树。当值确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越髙;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡.
可以看出,决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
二、决策树剪枝过程
树的剪枝算法
? 输入:生成算法产生的整个树,参数:
? 输出:修剪后的子树。
? (1) 计算每个结点的经验熵;
? (2) 递归地从树的叶结点向上回缩。设一组叶结点回缩到其父结点之前与之后的整体树分别为和,其对应的损失函数值分别是()与(),如果()?(),则进行剪枝,即将父结点变为新的叶结点。
? (3) 返回(2),直至不能继续为止,得到损失函数最小的子树。
三、CART 树分类与回归树(Classification And Regression Tree, CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。以下将用于分类与回归的树统称为决策树。
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART算法由以下两步组成:
? (1) 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
? (2) 决策树剪枝:用验证数据集对己生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
CART 生成决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini Index)最小化准则,进行特征选择,生成二叉树。
回归树的生成假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集
={(1,1),(2,2),?,(,)}一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元,1,2,?,,并且在每个单元上有一个固定的输出值,于是回归树模型可表示为:
()=∑=1(∈)当输入空间的划分确定时,可以用平方误差∑∈(?())2来表示回归树对于训练数据的预测误差,用平方误差最小的准求解每个单元上的最优输出值。易知,单元上的的最优值? 是的所有输入实例对应的输出的均值,即:
? =(∣∈)采用启发式的方法对输入空间进行划分,选择第j个变量()和它取的值s,作为切分变量(Splitting Variable)和切分点(Splitting Point), 并定义两个区域:
1(,)={∣()≤}和2(,)={∣()>}然后寻找最优切分变量j和最优切分点s,具体地,求解
,[1∑∈1(,)(?1)2+2∑∈2(,)(?2)2]对固定输入变量j可以找到最优切分点s。
? 1=(∣∈1(,))和? 2=(∣∈2(,))遍历所有输入变量,找到最优的切分变量j,构成一个对(,)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树(Least Squares Regression Tree)。
分类树的生成分类树用基尼指数选择最优特征,同时决定该特征的最有二值分割点。
在分类问题中,假设有K个类,样本点属于第k类的概率为,则概率分布的基尼指数定义为:
()=∑=1(1?)=1?∑=12对于二分类问题,若样本点属于第一个类的概率是p,则概率分部的基尼指数为:
()=2(1?)对于给定的样本集合,其基尼指数为:
()=1?∑=1(||||)2这里,是中属于第k类的样本子集,K是类的个数。
如果样本集合根据特征是否取某一可能值被分割成1和2两部分,即:
1={(,)∈∣()=},2=?1则在特征的条件下,集合的基尼指数定义为:
(,)=|1|||(1)+|2|||(2)基尼指数()表示集合的不确定性,基尼指数(,)表示经?=?分割后集合的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
CART生成算法
? 输入:训练数据集,停止计算的条件;
? 输出:CART决策树。
? 根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
? (1) 设结点的训练数据集为,计算现有特征对该数据集的基尼指数。此时,对每一个特征对其可能取的每个值,根据样本点对=的测试为“是”或 “否”将分割成1和2两部分,计算=时的基尼指数。
? (2) 在所有可能的特征以及它们所有可能的切分点中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依据最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
? (3) 对两个子结点递归地调用上述操作,直至满足停止条件为止。
? (4) 生成CART决策树。
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
CART 剪枝CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测,提高模型泛化能力。CART剪枝算法由两步组成:首先从生成算法产生的决策树0底端开始不断剪枝,直到0的根结点,形成一个子树序列{0,1,?,};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
在剪枝过程中,计算子树的损失函数:
()=()+||其中,为任意子树,()为对训练数据的预测误差(如基尼指数),||为子树的叶结点个数,为参数,()为参数是时的子树的整体损失。参数权衡训练数据的拟合程度与模型的复杂度。
对固定的,—定存在使损失函数最()小的子树,将其表示为;在损失函数()最小的意义下是最优的。容易验证这样的最优子树是唯一的。当大的时候,最优子树偏小;当小的时候,最优子树偏大。极端情况,当=0时,整体树是最优的。当→∞时,根结点组成的单结点树是最优的。
可以用递归的方法对树进行剪枝。将从小增大,$0=a_{0}<a_{1}<\cdots <a_{n}<+\infty ,产生一系列的区间味[a_{i},a_{i+1}),;;i=0,1,\cdots ,n;剪枝得到的子树序列对应着区间a\in [a_{i},a_{i+1}),;;i=0,1,\cdots ,n的最优子树序列\left { T_{0},T_{1}, \cdots ,T_{n} \right }$,序列中的子树是嵌套的。
具体地,从整体树0开始剪枝,对0的任意内部结点t,以t为单结点树的损失函数是:
()=()+以t为根结点的子树的损失函数是:
()=()+||当=0及充分小时,有不等式:
()<()当增大时,在某一有:
()=()当再增大时,()>(),只要=()?()||?1,与t有相同的损失函数值,而t的结点少,因此t比更可取,对进行剪枝。
为此,对0中每一内部节点t,计算:
()=()?()||?1它表示剪枝后整体损失函数减少的程度。在0中减去()最小的,将得到的子树作为1,同时将减小的()设置为1。1为区间[1,2)的最优子树。
如此剪枝下去,直到得到根节点。在这一过程中,不断地增加的值,产生新的区间。
在剪枝得到的子树序列{0,1,?,}中果果交叉验证选取最优子树。
具体地,利用独立的验证数据集,测试子树序列{0,1,?,}中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树{0,1,?,}都对应一个参数{0,1,?,}。所以,当最优子树选定时,对应的也就确定了,即得到了最优决策树。
猜你喜欢
- 2024-11-13 五大基本算法 五大基本算法是什么
- 2024-11-13 高级程序员必备:分治算法分享 分冶算法
- 2024-11-13 最快速的寻路算法 Jump Point Search
- 2024-11-13 手机实时人工智能之「三维动作识别」:每帧只需9ms
- 2024-11-13 模型压缩 | 无需"精雕细琢","随机剪枝"足矣!(ICLR 2022)
- 2024-11-13 决策树算法的剪枝策略:优化模型的关键路径
- 2024-11-13 基于Python的决策树分类器与剪枝 利用python建立决策树模型
- 2024-11-13 离线强化学习的单次修剪 离线训练模型
- 2024-11-13 只要保留定位感知通道,目标检测模型也能剪枝70%参数
- 2024-11-13 用动态数据修剪加速深度学习 动态数据变化视频制作
你 发表评论:
欢迎- 11-13第一次养猫的人养什么品种比较合适?
- 11-13大学新生活不适应?送你舒心指南! 大学新生的不适应主要有哪些方面
- 11-13第一次倒班可能会让人感到有些不适应,以下是一些建议
- 11-13货物大小不同装柜算法有哪些?怎么算?区别有哪些?
- 11-13五大基本算法 五大基本算法是什么
- 11-13高级程序员必备:分治算法分享 分冶算法
- 11-13最快速的寻路算法 Jump Point Search
- 11-13手机实时人工智能之「三维动作识别」:每帧只需9ms
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)