熵值的计算公式如上图。

预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点;

后剪枝:是先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,那么我们可以继续扩展该节点。但是,如果精度降低,则不应该扩展,节点应该转换为叶节点。

1. 预剪枝

下表为西瓜数据集

以信息增益准则来进行属性选择,从上表数据可以得到一棵决策树,如下图1所示:

这是未剪枝的决策树,以属性“脐部”来对训练集进行划分时,产生3个分支凹陷、稍凹,平坦,然而是否应该进行这个划分呢?预剪枝要对划分前后的泛化性能进行评估。

划分前,所有样例集中在根结点,若不进行划分,该结点被标记为叶结点,其类别标记为训练样例数最多的类别,若将该结点标记为“好瓜”。用上表中的验证集对这个单结点决策树进行评估,样例(4,5,8)被正确分类,另外的4个样例(9,11,12,13)分类错误,可得验证集上的精度为42.9%

若用属性“脐部”划分之后,三个结点分别包含训练样例(1,2,3,14)、(6,7,15,17)、(10,16)

三个结点分别被标记为叶结点“好瓜”、“好瓜”、“坏瓜”,此时验证集中的样例(4,5,8,9,13)被分类正确,验证精度,于是应该用“脐部”进行划分。

然后,决策树算法应该对蓝色结点进行划分,基于信息增益准则以“色泽”作为划分属性。使用色泽划分后,编号为9的验证集样本分类结果由正确转为错误,验证集下降为57.1%,故预剪枝测量将禁止蓝色结点2的被划分。

对于结点3,最优划分属性为“根蒂”,划分后验证集精度仍为71.4%。这个划分不能提升验证集精度,故预剪枝测量将禁止结点3的被划分。

对于结点4, 其所含训练样例已属于同一类,不再进行划分。

预剪枝使得很多决策树的很多分支没有展开,降低了过拟合的风险,同时显著减少了决策树的训练时间开销和预测时间开销。但是,另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但是在其基础上进行的后续划分却有可能带来性能显著提升。预剪枝 是一种“贪心”策略,这给预剪枝带来了欠拟合的风险。

2. 后剪枝

后剪枝先生成一颗完整的决策树,由图1可知,该决策树的验证精度为42.9%。现在自底向上地对叶结点进行考察,先看结点6,若将该分支剪去,则6变为叶结点,替换后叶结点包含编号(7,15)训练样本,该叶结点被标记为好瓜,此时决策树的验证精度提高至57.1%,于是后剪枝决定剪枝,剪枝后如下图2所示:

然后考察5,将其变为叶结点后包含编号为(6,7,15)的样例,叶结点标记为“好瓜”,此时决策树精度仍为57.1%。可以不进行剪枝。

对于结点2,将其子树换为叶结点,该叶结点包含编号为(1,2,3,14)的样例,标记为“好瓜”,此时决策树的验证集精度提高至71.4%,做剪枝处理。

对于结点3和1,将其对应子树替换为叶结点,所得决策树的验证集精度分别为71.4%和42.9%,均未得到提高,被保留。最终,基于后剪枝策略生成的决策树如图2所示,其验证精度为71.4%。

3. 两种策略的比较

后剪枝策略通常比预剪枝保留了更多的分支。一般情况下,后剪枝决策树的欠你和风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程在生成完全决策树之后才能进行,并且要自底向上对树中的所有非叶子结点逐一计算,因此训练时间开销比未剪枝决策树和预剪枝决策树的开销大得多。

Python机器学习 使用sklearn构建决策树复习相关推荐

  1. Python 机器学习 利用sklearn构建决策树的实现 2

    决策树 import numpy as npimport os%matplotlib inlineimport matplotlibimport matplotlib.pyplot as pltplt ...

  2. Python机器学习【二】 - 决策树

    Python机器学习[二] - 决策树 原文地址:Python机器学习[二] - 决策树 上一篇基于sklearn Python库创建K近邻模型(KNN)实现了机器学习Hello World示例,KN ...

  3. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  4. python机器学习库sklearn——决策树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...

  5. python 机器学习管道_构建机器学习管道-第1部分

    python 机器学习管道 Below are the usual steps involved in building the ML pipeline: 以下是构建ML管道所涉及的通常步骤: Imp ...

  6. python机器学习案例系列教程——决策树(ID3、C4.5、CART)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树简介 决策树算是最好理解的分类器了.决策树就是一个多层if-else函数,就是对对象属性进行多层if-else判断,获取目标属性 ...

  7. python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  8. Python机器学习(sklearn)——分类模型评估与调参总结(下)

    21.集成方法有随机森林(random forest)和梯度提升树(gradient boosted decision tree)GBDT 随机森林中树的随机化方法有两种: (1)通过选择用于构造树的 ...

  9. python机器学习库sklearn——朴素贝叶斯分类器

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 文档贝叶斯分类器的相关的知 ...

最新文章

  1. java gson使用_Java 中 Gson的使用
  2. App原生、混合、纯WEB开发模式的优劣分析
  3. 2020-11-22(工作集与常驻集)
  4. winsetup制作linux启动盘,winsetupfromusb怎样做linux启动盘
  5. log4j2常见配置
  6. Hadoop_计算框架MapReduce
  7. Treiber Stack简单分析
  8. 红帽企业版linux 7.3,红帽推企业Linux 7.3 新功能特性一览
  9. yum 安装rabbitMQ
  10. 十八、完成登录与注册页面的前端
  11. flash 实例教程
  12. 【支付】银行卡收单业务
  13. Android10支持ntfs格式u盘
  14. [计算机组成原理]海明校验及其实现
  15. Aggregation-Based Graph Convolutional Hashing forUnsupervised Cross-Modal Retrieval
  16. JAVA.UTIL.ARRAYLIST 详解
  17. 0.1元成本柿饼派实现红外控制空调了
  18. 焕焕写的--高德地图导入
  19. Kotlin实现定时任务(AlarmManager + BroadcastReceiver)
  20. mmse评估量表_简易精神状态评价量表(MMSE量表)

热门文章

  1. Pyhton入门 笔记 第三天 正则表达式与JSON
  2. Swiper.js wap app 图片滑动效果
  3. JAVA学习之旅番外篇
  4. DB Manager access to SQLite
  5. CentOS Linux 环境 Rails 安装记录
  6. ScheduledExecutorService线程调度的使用
  7. JUnit5 测试套件示例
  8. Servlet HTTP 状态码
  9. raster | R语言中的空间栅格对象及其基本处理方法(Ⅱ):投影、属性提取
  10. django默认缓存是多大_半个月搞定Django绝不是空话