第六章 决策树

文章目录

  • 第六章 决策树
  • 前言
  • 一、思维导图
  • 二、主要内容
    • 1、训练和可视化决策树
    • 2、做出预测
    • 3、估计类概率
    • 4、CART训练算法
    • 5、计算复杂度
    • 6、基尼不纯度或熵
    • 7、正则化超参数
    • 8、回归
    • 9、不稳定性
  • 三、课后练习
  • 四、总结

前言

前一章我们学习一个很强大的机器学习模型,支持向量机。这一章我们来继续学习下一个强大的模型,决策树。它同样支持分类和回归,多用于做分类任务,决策树也是会面会提到的随机森林的基础。决策树同样是在训练集中拟合一个模型,不同的是,如果在不做任何限制的情况下,决策树容易过拟合训练数据,并且每次产生模型是随机的。下面就让我们来开始学习吧。


一、思维导图

二、主要内容

1、训练和可视化决策树

  1. 决策树训练
    决策树的训练与其他模型的训练类似,都是在训练集上拟合出一个模型,不同的是决策树不再使用梯度下降、求解闭式方程那一套,而是使用特定的算法类分割数据集,从而实现预测。
  2. 决策树可视化
    决策树的可视化需要用到一些其他的库来辅助完成,例如:Graphviz。

2、做出预测

  1. 概念
    决策树预测的中心思想就是通过计算基尼不纯度或熵来分割训练集,最终训练出一个拟合训练集的决策树,用于泛化到新的实例。树的结构由使用的模型类与模型超参数决定。

3、估计类概率

  1. 概念
    分类决策树的输出一般为某一个分类,而不是输出分类的概率。如果想要输出为分类的概率,就需要根据特征找到分类的节点,再根据该节点所有子节点中每个分类的占比计算分类的概率。

4、CART训练算法

  1. 实现
    CART算法就是通过不停的迭代,最小化一个体现决策树节点纯度的成本函数,直到找到一个特征和阀值能够相对完美的分割数据集然后分割数据,继续在剩余的训练集中重复上述操作,直到得到了一个完美的决策树或者是到达了超参数设置的最大值,停止分割。
  2. 不足
    由于CART是贪婪算法,我们会得到一个相对还不错的模型,也仅限于还不错并不一定是最优,训练一棵最优树是一个相当棘手的问题,所以我们不得不接受我们得到的是一个还不错的模型。

5、计算复杂度

  1. 训练计算复杂度
    我们在训练一个决策树的时候需要遍历训练集的每一个实例每一个特征,所以训练的计算复杂度为O(m x n log2(m))。如果我们面对的是小训练集,那么我们在训练之前可以先对数据集进行排序,但如果是大训练集的话,会增加训练的时间。
  2. 预测计算复杂度
    由于在预测时候,我们每个节点值检查一个特征,所以预测是计算复杂度为O(log2(m)),复杂度与数据的特征数量无关。

6、基尼不纯度或熵

  1. 概念
    基尼不纯度与熵的本质是一样的,都是体现一个节点上的数据的纯度。在sklearn中我们可以使用不同的超参数来决定选择。
  2. 基尼不纯度与熵的选择
    在sklearn中默认的是选择基尼不纯度来分割数据集,因为相对于熵来说基尼不纯度的计算速度要相对快一点。当然我们也可以根据自己需求选择不同超参数,基尼不纯度倾向于分割常见类,而熵倾向于分割一个更加平衡的决策树。

7、正则化超参数

与其他模型类似并且比其他模型更严重的问题就是决策树容易过拟合训练集。我们两种办法来解决过拟合的问题。

  1. 添加超参数
    与其他模型一样,决策树同样可以通过添加超参数的方式来来正则化模型,例如:决策树的深度、每个节点树叶的数量等。
  2. 剪枝
    这是决策树特有的正则化方式,首先先拟合出一个完整的决策树,然后再对决策树进行剪枝处理,删除掉一些不必要的枝叶。


图1:不同超参数的决策树模型

8、回归

  1. 定义
    回归决策树与分类决策树类似,但是回归决策树不再是预测一个分类,而是预测一个值,这个值等于该节点所有子节点的平均值。算法要做的就是尽量拟合子节点的值接近预测值。
  2. 分割实例的依据
    CART算法与基础的决策树算法不同,不在是根据训练集的纯度来分割,而是根据最小化预测值与实例值的误差来分割数据。

9、不稳定性

  1. 概念
    决策树对于训练集细微的变化非常敏感,一旦数据集发生概念,就会得到一个截然不同的决策树。并且决策树本是也是随机的,在不设定随机值的情况下即使数据集不变,每次都会得到一棵不同的决策树。
  2. 解决办法
    对于这种随机的问题,之后会提到的随机森林就可以解决这一决策树的不稳定性。

三、课后练习

1.如果训练集有100万个实例,训练决策树(无约束)大致的深度是多少?
因为一个包含m节点的均衡二叉树的深度为log2(m),如果不加以限时的话,sklearn将会训练出每个节点一个实例二叉树,所以如果训练集有100万那么二叉树的深度将为log2(1000000)约等于20,一般情况下会比这个还多,因为决策树一般不会完全平衡。

2.通常来说,子节点的基尼不纯度是高于还是低于其父节点?是通常更高/更低?还是永远更高/更低?
通常来说,一个节点的基尼不纯度是低于他的父节点的,因为CART的分割计算算法就是使得一个节点的子节点的加权基尼不纯度低于父节点,但是也不是绝对的, 当两个子节点中两个节点的人基尼不纯度差别特别大时并且差别足以抵消掉与父节点的差距,那么就会出现子节点的基尼不纯度比父节点高的情况。

3.如果决策树过拟合训练集,减少max_depth是否为一个好主意?
是一个好主意,因为减少max_depath是添加了对模型的约束,从而解决对模型的过拟合。

4.如果决策树对训练集欠拟合,尝试缩放输入特征是否为一个好主意?
因为决策树本身不需要对特征进行缩放,所以不管是什么情况,在决策树中使用特征缩放都是浪费时间的行为。

5.如果在包含100万个实例的训练集上训练决策树需要一个小时,那么在包含1000万个实例的训练集上训练决策树,大概需要多长时间?
因为训练一个决策树的计算复杂度为O(n x m log2 (m))当把训练集扩大十倍,那么以K=(n×10m×log(10m))/(n×m×log(m))=10×log(10m)/log(m),如果m=1000000,那么K约等于11.7,需要11.7个小时。

6.如果训练集包含10万个实例,设presort=True可以加快训练吗?
只有在数据集少于1000的情况下添加presort=true才会是的训练变快,当数据集很大时,只会使得训练更慢。

四、总结

本章介绍的是一个新的机器学习模型,决策树。基本训练与预测流程与其他的模型相似,同样是通过训练集然后训练,但是也有几个特殊的地方。

  1. 训练方式:训练不再是使得某个函数收敛达到最优解,而是分割训练集获得一个用于决策的树。
  2. 支持分类:决策树分类的依据是一个节点上的所有示例中某个分类的数量占比。
  3. 支持回归:决策树回归的依据是一个节点上的预测值,预测值等于该节点所有子节点的平均值。
  4. 不稳定:决策时对于数据集细微的变化很敏感,并且决策树在不确定随机数的情况下每次会生成不同的随机数。

对文章有任何疑惑或者想要和博主一起学机器学习一起进步的朋友们可以添加 群号:666980220。需要机器学习实战电子版或是思维导图的也可以联系我。祝你好运!

项目地址: github

边境的悍匪—机器学习实战:第六章 决策树相关推荐

  1. 零基础学Python课后实战第六章

    零基础学Python课后实战第六章 tips 实战一:导演为剧本选主角 实战二:模拟美团外卖商家的套餐 实战三:根据生日判断星座 实战四:将美元转换为人民币 tips 格式化字符串: {:0>9 ...

  2. 关于《机器学习实战》中创建决策树的核心代码分析

       关于<机器学习实战>中创建决策树的核心代码分析                 SIAT  nyk          2017年10月21日星期六 一.源码内容 def create ...

  3. 第六章.决策树(Decision Tree)—CART算法

    第六章.决策树(Decision Tree) 6.2 CART算法 CART决策树的生成就是递归地构建二叉决策树的过程.CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树. 1.Gin ...

  4. 《机器学习实战》第二章学习笔记:K-近邻算法(代码详解)

    <机器学习实战>数据资料以及总代码可以去GitHub中下载: GitHub代码地址:https://github.com/yangshangqi/Machine-Learning-in-A ...

  5. 机器学习实战第15章pegasos算法原理剖析以及伪代码和算法的对应关系

    Pegasos原文是: http://ttic.uchicago.edu/~nati/Publications/PegasosMPB.pdf 还是挺长的,论文结构是: 第1~6页:主要原理 第7~15 ...

  6. 机器学习实战(六)——支持向量机

    第六章 支持向量机 6.1 什么是支持向量机 6.1.1 线性SVM 6.1.2 函数间隔和几何间隔 6.1.3 最大间隔分离超平面 6.1.4 支持向量和间隔边界 6.1.4 学习的对偶算法 6.2 ...

  7. 机器学习实战:第一章

    根据方教授的建议和要求,在暑假里简单自学<机器学习实战>,记录学习过程和代码. 记 第一章是对机器学习的一些概念介绍,定义了若干专业术语.列举了很多机器学习的各类实例.给出了一个" ...

  8. 吴恩达机器学习(第六章)——正则化

    第六章-正则化 文章目录 第六章-正则化 过拟合问题 代价函数 线性回归的正则化 Logistic回归的正则化 过拟合问题 如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代 ...

  9. 机器学习实战(六)AdaBoost元算法

    目录 0. 前言 1. AdaBoost 2. 单层决策树 3. 非均衡数据 4. 实战案例 4.1. 马病死亡案例 学习完机器学习实战的AdaBoost元算法,简单的做个笔记.文中部分描述属于个人消 ...

  10. python数据分析与挖掘实战-第六章拓展偷漏税用户识别

    第六章分别使用了LM神经网络和CART 决策树构建了 电力窃漏电用户自动识别模型,章末提出了拓展思考–偷漏税用户识别. 第六章及拓展思考完整代码 https://github.com/dengsiyi ...

最新文章

  1. 找出现有Vector或ArrayList或数组中重复的元素给现有Vector或ArrayList或数组去重
  2. java 获取系统当前时间
  3. Linux 环境下安装 Golang
  4. 为什么SpringBoot如此受欢迎,以及如何有效地学习SpringBoot?
  5. 信号中断 与 慢系统调用
  6. log4j日志 linux配置,Log4j 日志详细用法
  7. Linux文件查找命令find用法整理(locate/find)
  8. [实战演练]2014年人人公司应届生校招技术笔试题
  9. 爬虫+pyecharts数据分析实例:当当网
  10. 手工制作机器人用彩泥_灌浆壶和手工壶的区别,你知道吗?
  11. 分布有限传输速度高的计算机网络,第5章 计算机网络基础.ppt
  12. 操作系统微内核架构研究
  13. 高通设备找不到连接QXDM的端口
  14. 基于java可视化的会议室管理系统
  15. 数据库ALTER语句使用
  16. tableau:柱图的两种实现方式
  17. 如何提高文献检索能力?
  18. 元好问《摸鱼儿-雁邱词》赏析
  19. 破解Wi-Fi -- Python
  20. 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码

热门文章

  1. onedrive搭建个人网盘
  2. javascript输入正三角倒三角
  3. Todo Tree插件配置
  4. 变形金刚11280超清迅雷下载
  5. 华为物联网操作系统 LiteOS
  6. 【支付】网络支付-支付网关模式与虚拟账户模式
  7. 【大话设计模式】第0章 面向对象基础
  8. B 站顶流何同学对话苹果 CEO 库克
  9. 库克开怼谷歌和Facebook:自己搞的烂摊子,要会自己收拾
  10. Msql特定业务之自增业务表,适用于根据表去分类管理业务数据