相关文章推荐
大气的凳子  ·  golang php ...·  1 年前    · 
没读研的油条  ·  useState is not ...·  1 年前    · 

什么是决策树的剪枝?

对比日常生活中,环卫工人在大街上给生长 茂密 的树进行枝叶的修剪。在机器学习的决策树算法中,有对应的剪枝算法。将比较复杂的决策树,化简为较为简单的版本,并且不损失算法的性能。

为什么要剪枝?

剪枝是决策树算法防止过拟合的一种手段,因为在学习过程中,决策树根据训练样本进行拟合,生成了针对于训练数据集精确性极高的模型。但是训练数据集,不可避免是一种有偏的数据。
所以我们为了提高决策树的泛化性能,采取了剪枝的策略。使得决策树不那么对于训练数据精确分类,从而适应任何数据。

剪枝策略的分类

剪枝算法可以分为:预剪枝和后剪枝

预剪枝就是在决策树生成过程中,在每次划分时,考虑是否能够带来决策树性能的提升。

  1. 如果可以提升决策树的性能则会进行划分。
  2. 如果不能则会停止生长。

一般的方法有如下几种:

  1. 当树的深度达到一定的规模,则停止生长。
  2. 达到当前节点的样本数量小于某个阈值的时候。
  3. 计算每次分裂对测试集的准确性提升,当小于某个阈值,或不再提升甚至有所下降时,停止生长。
  4. 当信息增益,增益率和基尼指数增益小于某个阈值的时候不在生长。

优点:思想简单,算法高效,采用了贪心的思想,适合大规模问题。
缺点:提前停止生长,有可能存在欠拟合的风险。

后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对决策树进行剪枝,与预剪枝最大的不同就是:
决策树是否生长完整。

决策树的生成是学习局部的模型,后剪枝则是学习整体的模型。

后剪枝算法的分类

  1. 错误率降低剪枝(REP)
  2. 悲观剪枝(PEP)
  3. 代价复杂度剪枝(CCP)
  4. 最小误差剪枝(MEP)
  5. CVP (Critical Value Pruning)
  6. OPP (Optimal Pruning)

本文以西瓜书为例,错误率降低剪枝(REP)。

将数据分为训练集和测试集,用训练集去生成一颗完整的决策树,用测试集去剪枝。

该算法将树上的每个节点都作为剪枝的候选对象,通过如下步骤进行剪枝操作:
step1:删除以此节点为根节点的树,
step2:使其成为叶子结点,赋予该节点最常见的分类
step3:对比删除前和删除后的性能是否有所提升,如果有则进行删除,没有则保留。

优点:可以最大限度的保留树的各个节点,避免了欠拟合的风险。
缺点:相较于预剪枝的时间开销巨大。

奥卡姆剃刀定律

奥卡姆剃刀是一种思想,在效果相同,性能一致的情况下,模型越简单越好。在简直过程中,若复杂的决策树和简答的决策树的性能相同则优先选择结构简单的决策树。

预告andTODO

1.决策树的连续与缺失值的处理
2.Bagging——随机森林
3.Boosting——Adamboost,GBDT,Xgboost

Reference

[1] 《机器学习》 p79-p83
[2] 《百面机器学习》p67-p68
[3]
https://www.cnblogs.com/starfire86/p/5749334.html

决策树的剪枝什么是决策树的剪枝?为什么要剪枝?剪枝策略的分类预剪枝优缺点后剪枝后剪枝算法的分类优缺点奥卡姆剃刀定律预告andTODOReference什么是决策树的剪枝?对比日常生活中,环卫工人在大街上给生长茂密的树进行枝叶的修剪。在机器学习的决策树算法中,有对应的剪枝算法。将比较复杂的决策树,化简为较为简单的版本,并且不损失算法的性能。为什么要剪枝?剪枝是决策树算法防止过拟合的一种手段,... 7.1. 剪枝 (prepruning) 剪枝 是指在 决策树 生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来 决策树 泛化性能提升,则停止划分并将当前结点标记为叶结点。 用通俗的话来说,就是如果进行划分能够带来更好的结果就进行划分,否则不进行划分。首先,我们定义一个训练集和一个验证集如下:(西瓜书中间的例子) 上面一部分是训练集,下面一部分是测试集。然后让我们来对训练集(记住是训练集)进行划分,划分的规 过拟合:训练误差低,测试误差大,即对已知训练数据拟合很好,但是未知数据的 测能力不好,训练出来的模型结构一般较复杂。 欠拟合:训练误差高,测试误差低,即对已知的训练数据的拟合误差要大于未知数据的,训练出来的模型过于简单。 模型的复杂度一般体现在:深度大小和也节点数量,深度小且叶节点少则模型简单,深度
剪枝 的目的: 剪枝 的目的是为了避免 决策树 模型的过拟合。因为 决策树 算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。 决策树 剪枝 策略最基本的有两种: 剪枝 (pre-pruning)和后 剪枝 (post-pruning): 剪枝 (pre-pruning): 剪枝 就是在构造 决策树 的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来 决策树 模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。 后 剪枝 (post-pr
转载自:http://blog.csdn.net/u014697805/article/details/78636135 https://www.jianshu.com/p/794d08199e5e(一) 剪枝 算法的简介: 剪枝 一般是为了避免树的过于复杂,过于拟合而进行的一个动作, 剪枝 操作是一个全局的操作。( 剪枝 剪枝 就是在树的构建过程(只用到训练集),设置一个阈值(样本个数小于 定阈
决策树 启发式和修剪 我们可以将 决策树 定义为计算树,其中每个节点都包含一个关于属性的问题,节点的每个分支都包含对该问题的答案。 哪个问题/属性应该放在每个节点中,由 决策树 学习算法确定。 如Mitchel中所述,为学习 决策树 而开发的大多数算法都是核心算法的变体,该核心算法在可能的 决策树 的空间中采用了自上而下的贪婪搜索。 决策树 什么时候合适? 对于监督学习:该算法需要标记数据可用 分类:目标具有离散值 当我们有嘈杂的数据时:训练数据可能包含错误 ID3 (Examples, Target_Attribute, Attributes) Create a root node for the tree If all examples are positive, Return the single-node tree Root, with label = +.
一棵完全生长的 决策树 会面临一个很严重的问题,即过拟合。当模型过拟合进行 测时,在测试集上的效果将会很差。因此我们需要对 决策树 进行 剪枝 , 剪掉一些枝叶,提升模型的泛化能力。 决策树 剪枝 通常有两种方法, 剪枝 ( Pre-Pruning )和后 剪枝 ( Post-Pruning )。 剪枝 ( Pre-Pruning ) 剪枝 , 即在生成 决策树 的过程中提前停止树的增长。核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存
qt.qpa.screen: QXcbConnection: Could not connect to display localhost:18.0 Could not connect to any 技术宅zch: 1. 每种新的网络结构相当于只迭代训练了一次,这样正确吗? 可以这么理解,但是不一定新的网络结构只训练一次,好比连中2次500W的小概率,还是有概率训练到同样的神经元。并且这个与dropout_rate相关 2. 按照这种思路就相当于是有多少个epoch就会有多少个参与者进行Bagging投票了,而且每个参与者都只训练了一遍,这训练的准确吗? 训练的神经网络中的神经元(参数)是共享的,而不是完全独立的,针对每个神经元的训练,极大概率(99.999%+)情况下不止一次。dropout本质上,只是让网络学习过程中后方神经元减少对前方特定神经元的输出的过度依赖,而提出的训练策略。所以整体上和没用dropout的网络,结果相差不大,同时又有防止过拟合的机制。 Dropout是什么?为什么Dropout可以防止过拟合? 技术宅zch: 具体可以这样解释一下 对于一个模型的总参数假设是4维向量[1,2,3,4] 假设drop一个参数,利用dropout之后可以理解为训练后得到4个3维模型 [1,2,3]、[1,2,4]、[1,3,4]、[2,3,4] 如果不用dropout,而只用bagging策略的话,是是不是需要4个4维的模型?这样不就省了参数量了么 Dropout是什么?为什么Dropout可以防止过拟合? 梦想吸引力: 楼主您好!打扰您了!我看您的帖子中说:Dropout他在训练阶段中每次迭代都随机的删掉一些神经元,相当于是一个新的网络结构进行训练,从而可以实现Bagging的策略。但是这样的话,每种新的网络结构相当于只迭代训练了一次,这样正确吗? 还有,按照这种思路就相当于是有多少个epoch就会有多少个参与者进行Bagging投票了,而且每个参与者都只训练了一遍,这训练的准确吗? TensorFlow1.x入门(4)——线性回归 Wind 丶restless: 超级好的教程,非常感谢