精华内容
下载资源
问答
  • 最常用的决策树预剪枝参数有两个: min_samples_split : 决策树某个节点的数据量小于该值时停止下分(注意该参数不能为1) max_depth:决策树的最大深度 # 最基本的决策树模型生成 from sklearn import tree dtc ...

    最常用的决策树预剪枝参数有两个:

    1. min_samples_split : 决策树某个节点的数据量小于该值时停止下分(注意该参数不能为1)
    2. max_depth:决策树的最大深度
    # 最基本的决策树模型生成
    from sklearn import tree
    dtc = tree.DecisionTreeClassifier()  # 回归决策树同理
    dtc.fit(x_train, y_train)
    
    # ---------------------------------------------------
    
    # sklearn的GridSearchCV选择决策树预剪枝最佳参数
    from sklearn.model_selection import GridSearchCV
    # 设定想要尝试效果的参数,多个参数用dict类型组合,参数名为key,参数值为list组合
    tree_param = {"min_samples_split":[2, 3, 4], "max_depth":[5, 6, 7]}
    # GridSearchCV(“模型原型”, param_grid=“参数组合”, cv=n)
    g_s = GridSearchCV(DecisionTreeClassifier(), param_grid=tree_param, cv=5)
    g_s.fit(x_train, y_train)
    # 返回最佳参数和其对应的最佳评分
    g_s.best_params_, g_s.best_score_
    
    展开全文
  • 概念:决策树生成过程中对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点记为叶结点,其类别标记为训练样例数最多的类别。 我们直接看西瓜书上的例子,其中{1,2,...

    预剪枝

    概念:决策树生成过程中对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点记为叶结点,其类别标记为训练样例数最多的类别。

    我们直接看西瓜书上的例子,其中{1,2,3,6,7,10,14,15,16,17}为训练集,{4,5,8,9,11,12,13}为验证集。
    在这里插入图片描述
    (1)在未划分前,根据训练集,类别标记为训练样例数最多的类别,由于训练集中的好瓜与坏瓜是相同多的类别,均为5,因此任选其中一类,书中选择了好瓜作为标记类别。

    当所有节点集中在根节点,所有训练集属于标记类别的仅有{4,5,8},因此分类正确的是3/7*100%=42.9%
    见下表:

    编号 真实中是否为好瓜 判断是否为好瓜
    4
    5
    8
    9
    11
    12
    13
    正确率 3/7

    (2)根据信息增益准则,按照脐部进行划分,在训练集中,凹陷特征好瓜的占比多,因此凹陷划分为好瓜,稍凹特征好过占比多,因此将其标记为好瓜,因此按照脐部划分的子树结果如下。
    在这里插入图片描述
    现在按照验证集的结果进行对比:

    编号 真实中是否为好瓜 判断是否为好瓜
    4 凹陷
    5 凹陷
    8 稍凹
    9 稍凹
    11 平坦
    12 平坦
    13 凹陷
    正确率 3/7 5/7

    我们能看到正确率从3/7提升到5/7,正确率从42.9%提升至71.4%,脐部的划分选择保留。

    (3)在脐部划分的基础上,进一步计算凹陷、根蒂特征下,其他属性的信息增益,根据计算结果可知,在凹陷的情况下,色泽的信息增益最大,因此对于凹陷的西瓜,进一步确定按照色泽进行划分,划分结果如下:
    在这里插入图片描述
    按照这个树,我们看下验证集的结果:

    编号 真实中是否为好瓜 只看脐部判断是否为好瓜 同时看脐部和色泽(没有的看上一层)
    4 凹陷 青绿
    5 凹陷 浅白
    8 稍凹
    9 稍凹
    11 平坦
    12 平坦
    13 凹陷 青绿
    正确率 3/7 5/7 4/7

    我们能看到正确率不升反降,所以这个划分不选择。

    (4)对稍凹数据集,进一步计算其他属性的信息增益,确定根蒂的信息增益最大,因此对稍凹,进一步按照根蒂进行划分:
    在这里插入图片描述
    按照这个树,我们看下验证集的结果:

    编号 真实中是否为好瓜 只看脐部判断是否为好瓜 同时看脐部和根蒂(没有的看上一层)
    4 凹陷
    5 凹陷
    8 稍凹 稍蜷
    9 稍凹 稍蜷
    11 平坦
    12 平坦
    13 凹陷
    正确率 3/7 5/7 5/7

    我们看到正确率没有上升,不选择这个划分。

    (5)因此按照预剪枝,最终形成的决策树如下图,其泛化性为71.4%。
    在这里插入图片描述

    后剪枝

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

    我们还是直接看书上的例子。
    (1)首先我们按照信息增益直接生成了一棵树:
    在这里插入图片描述
    我们看下正确率:

    编号 真实中是否为好瓜 判断是否为好瓜
    4
    5
    8
    9
    11
    12
    13
    正确率 4/7

    按照这个完整的决策树的正确率是3/7=42.9%

    (2)后剪枝将从决策树的底部往上进行剪枝,先看最底部的纹理,将其领衔的分支减掉,即将其换成叶子节点。按照测试集的划分,去掉纹理后树应该变成这样:
    在这里插入图片描述
    这时候的正确率为:

    编号 真实中是否为好瓜 使用整棵树判断是否为好瓜 剪掉纹理
    4
    5
    8
    9
    11
    12
    13
    正确率 3/7 4/7

    我们可以看出纹理剪掉后,正确率上升,那么纹理从树中被剪掉。

    (3)由于将纹理剪掉,是能提升验证精度,那么将纹理从其中剪掉,形成如下的决策树:
    在这里插入图片描述
    (4)这个决策树生成后,我们需要进一步剪枝,下一步的剪枝的对象应该是中间的色泽。剪枝了色泽后形成的决策树为:
    在这里插入图片描述
    这时我们再次带入验证集,看下决策的结果:

    编号 真实中是否为好瓜 剪掉纹理 再减掉中间的色泽
    4
    5
    8
    9
    11
    12
    13
    正确率 4/7 4/7

    我们发现正确率没有提升,但是也没有降低,因此可不进行剪枝,即对于脐部稍凹,根蒂稍蜷部分,可保留按照色泽进一步划分。
    (5)我们最后还要对左侧的色泽进行剪枝,剪枝后的决策树为:
    在这里插入图片描述
    对验证集进行验证,如下:

    编号 真实中是否为好瓜 剪掉纹理 再减掉左边的色泽
    4
    5
    8
    9
    11
    12
    13
    正确率 4/7 5/7

    我们发现正确率提升了,减掉左边的色泽,至此所以的枝都进行了修剪,形成了最终的决策树
    (5)最终的决策树如下:
    在这里插入图片描述

    总结

    预剪枝的优点:降低过拟合风险和显著减少了训练的时间和测试时间。
    预剪枝的缺点:带来了欠拟合风险。因为有些分支的当前划分虽然不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高。
    后剪枝的优点:后剪枝比预剪枝保留了更多的分支,欠拟合风险小,泛化性能往往优于预剪枝决策树。
    后剪枝的缺点:后剪枝训练时间开销大,后剪枝过程是在生成完全决策树之后进行的,需要自底向上对所有非叶结点逐一考察

    参考文章:
    https://blog.csdn.net/zfan520/article/details/82454814
    首先参考了这位博主的文章,也有了很大的启发,我的文章也是绝大部分偷师了这位博主的内容,自己做了一些小修改。
    https://www.cnblogs.com/lsm-boke/p/12256686.html
    这位博主的文章也写的很好,两篇结合彻底看懂了决策树的两个例子。

    展开全文
  • 决策树剪枝什么是决策树剪枝?为什么要剪枝剪枝策略的分类预剪枝优缺点后剪枝剪枝算法的分类优缺点奥卡姆剃刀定律预告andTODOReference 什么是决策树剪枝? 对比日常生活中,环卫工人在大街上给生长茂密的...

    什么是决策树的剪枝?

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

    为什么要剪枝?

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

    剪枝策略的分类

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

    预剪枝

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

    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

    展开全文
  • 周志华《机器学习》西瓜书 小白Python学习笔记(三) ———— 第四章 决策树 python代码 预剪枝 基于西瓜数据集2.0(提取码:esa8) ,选择信息增益作为属性选择指标,建立决策树。 步骤如下: 输入离散变量的取值...
  • 决策树剪枝matlab代码
  • 本文使用PyTorch进行决策树的实现,在实现决策树时,选用信息增益来选择划分属性. 数据集的纯度使用信息熵来度量: Ent(D)=−∑k=1∣Y∣pklog2pk Ent(D)=-\sum_{k=1}^{|Y|}p_klog_2p_k Ent(D)=−k=1∑∣Y∣​pk​log2...
  • 试编程实现基于基尼指数进行划分选择的决策树算法,为表4.2中数据生成预剪枝、后剪枝决策树,并与未剪枝决策树进行比较。 (牢骚:剪枝这块真是头大,剪枝的原理很清晰,代码实现的时候遇到了问题,看了一些代码,不...
  • Python编程实现预剪枝的CART决策树

    千次阅读 2019-09-06 21:21:23
    前面在Python编程实现基于基尼指数...决策树剪枝的基本策略有剪枝和后剪枝。本文主要是对剪枝的实现。剪枝是指在决策树的生成过程中,对每个结点在划分前后先进行评估,如果当前结点的划分不能带来决策树泛化...
  • 决策树剪枝策略

    2015-01-26 16:55:29
    决策树剪枝的目的去除训练树的过拟合问题,以维持树合理的深度及广度。按照剪枝的时段分可分为剪枝及后剪枝。剪枝是在树的生长时提前停止树的生长,后剪枝是在决策树生长完成后根据分枝节点的误差进行剪枝。 ...
  • 剪枝操作基本有预剪枝和后剪枝两个,预剪枝是说在决策树生成过程中,对每一个节点在划分前进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分,并将当前节点标记为叶子节点。后剪枝操作是指在训练完...
  • 周志华《机器学习》西瓜书 小白Python学习笔记(三) ———— 第四章 决策树 python代码 预剪枝 基于西瓜数据集2.0(提取码:esa8) ,选择信息增益作为属性选择指标,建立决策树。 步骤如下: 输入离散变量的取值...
  • 决策树决策树生成与剪枝

    万次阅读 多人点赞 2018-07-24 16:37:01
    1. 决策树学习 2. 最优划分属性的选择 2.1 信息增益 - ID3 2.1.1 什么是信息增益 ...3.2 如何进行决策树剪枝 3.2.1 剪枝 3.2.2 后剪枝 3.3.3 两种剪枝策略对比 参考 转自个人...
  • 决策树剪枝matlab代码森林 成本敏感决策森林算法 CSForest 的实现,发表于: Siers,MJ 和伊斯兰教,MZ(2015 年)。 使用成本敏感决策森林和投票的软件缺陷预测,以及类不平衡问题的潜在解决方案。 信息系统,51, ...
  • 决策树python源码实现(含预剪枝和后剪枝

    千次阅读 多人点赞 2019-06-21 19:30:41
    决策树python源码实现(含预剪枝和后剪枝) 一、说明         所用的环境为Ubuntu + python 3.6,在jupyter中运行。本文实现周志华《机器学习》西瓜书中的4.1 ~ 4.3中的...
  • 大神代码:https://blog.csdn.net/Snoopy_Yuan/article/details/69223240 昨天画不出有点烦躁,随便找了百度了一点点,还是画不出来。...不过,奇葩的是前后剪枝算出来的准确率一毛一样,估计程序里还有问题,以后...
  • 决策树剪枝(MEP,REP,PEP,CCP)

    千次阅读 2019-05-12 19:03:42
    决策树剪枝:MEP,REP,PEP,CCP
  • 决策树剪枝原理与CART算法

    万次阅读 多人点赞 2016-11-24 22:10:01
    继续关于决策树的内容,本篇文章主要学习了决策树剪枝理论和基于二叉树的CART算法。主要内容: 1.理解决策树损失函数的定义以及物理含义 2.基尼指数的主要两个作用 3.理解CART剪枝原理,以及它的基本假设和核心...
  • 决策树剪枝matlab代码代码作者:Gusheng Lin 联系人:或 此代码用于我们的 ACCV 论文。 请引用: [1] 林国胜、沉春华、Anton van den Hengel 和 David Suter; “使用坐标下降优化快速训练有效的多类提升”,ACCV...
  • (7条消息) decisiontreeclassifier 剪枝操作_决策树剪枝问题&python代码_weixin_39857876的博客-CSDN博客 path = clf.cost_complexity_pruning_path(Xtrain, Ytrain) #cost_complexity_pruning_path:返回...
  • 机器学习作业4 - 决策树剪枝

    千次阅读 2017-10-19 10:20:05
    决策树和两种剪枝方式(预剪枝和后剪枝)首先吐槽一下本次作业的残暴!手写决策树也就算了,还要剪枝!还要两种剪枝方式!!!写的我手残眼花,不过还好,勉强达到了题目要求。不过可以说明的是,我的代码肯定有需要...
  • 解决一个回溯问题,实际上就是一个决策树的遍历过程。一般来说,我们需要解决三个问题: 路径:也就是已经做出的选择。 选择列表:也就是你当前可以做的选择。 结束条件:也就是到达决策树底层,无法再做选择的条件...
  • 利用Mtalab编写实现决策树生成ID3算法,利用Sogou_webpage数据集进行训练、验证与测试。之后实现剪枝
  • 分类与回归CART (Ciassification and Regression Trees)是分类数据挖掘算法的一种。CART是在给定输入随机变量X条件下输出随机变量Y的条件分布概率。该模型使用了二叉树将预测空间递归划分为若干子集,Y在这些子集...
  • 以下代码是本人在学习西瓜书时花费两个礼拜根据原理进行原创,若需转载请咨询本人,谢谢! 自我研究模拟代码 ...Description: 机器学习 - C4.5(连续值) - 剪枝 Start: 18.10.1 End: """ import tim...
  • 决策树剪枝(ID3、C4.5) 1.预剪枝 原理介绍   预剪枝需要将训练集划分成训练集和验证集两部分。在根据训练集生成决策树时,面对一个已经被选中的(信息增益最大)的待划分特征,需要根据验证集在该特征划分前、划分...
  • 主要介绍了决策树剪枝算法的python实现方法,结合实例形式较为详细的分析了决策树剪枝算法的概念、原理并结合实例形式分析了Python相关实现技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,231
精华内容 2,492
关键字:

决策树预剪枝代码