2.5 决策树

到目前为止,我们已经研究了线性或线性基模型及其核变量。 在本节中,我们将考虑一种不同的分类或回归方法,在这种方法中,分类器是分段常数函数。 这类方法中最简单的是决策树,它将输入空间 分层 或划分为简单的规则区域,并为每个区域分配一个 常数 预测。

决策树是一种非常自然的决策模型,由一类易于解释的机器学习模型组成,从这个意义上说,我们可以很容易地推断出模型是如何得到预测的。 使用决策树的回归和分类模型称为CART classification and regression trees,即分类和回归树

2.5.1 回归决策树

数学上,(有向)树是一个 有向无环图 directed acyclic graph (见图2.3)。树的基顶点 base vertex 称为根节点 root node.。终端顶点terminal vertices 称为终端节点 terminal nodes。所有其他顶点称为内部节点 internal nodes。连接结点的边称为分支 branches。

在决策树的基础上,我们如何建立一个能够做出预测的模型?让我们先从一维回归的角度来讨论这个问题。

假设我们想去估计一些 oracle 函数 f ∗ : [ 0 , 1 ] → R f^*:[0,1]\to\mathbb{R} f∗:[0,1]→R。最简单的决策树通过筛选一些 θ 0 ∈ ( 0 , 1 ) \theta_0\in(0,1) θ0​∈(0,1) 以及定义分段常函数:

我们应该如何选择 a a a 和 b b b ?一个简单的方法是将他们作为区域内 f ∗ f^* f∗ 的均值:

这是一个深度为1的决策树,因为只有两个节点连接到根节点。

我们也可以通过进一步分割来构建更深层次的决策树:

更一般地,一个基于回归器的决策树通过分割输入域 X \mathcal{X} X 为 J \mathcal{J} J 个不同的、无重叠的区域 R 1 , R 2 , . . . R J \mathcal{R}_1,\mathcal{R}_2,...\mathcal{R}_J R1​,R2​,...RJ​,其中, ∪ j = 1 N R j = X \cup^N_{j=1}\mathcal{R}_j=\mathcal{X} ∪j=1N​Rj​=X。然后给每个在区域 R j \mathcal{R}_j Rj​ 的点赋一个常数值 a j a_j aj​。

更准确点,一个回归决策树假设平面由下面形式的函数组成:

理论上区域 R j \mathcal{R}_j Rj​ 可以是任何形状的,但通常我们希望结果是可解释的,因此我们将其限制为高维矩形(图2.5)。

  • Optimization

我们如何在回归树的假设空间中进行优化?

给定一个数据集 D = { x i , y j } i = 1 N \mathcal{D}=\{x_i,y_j\}^N_{i=1} D={xi​,yj​}i=1N​,我们设 a j a_j aj​ 为 y ˉ i \bar{y}_i yˉ​i​ for x i ∈ R j x_i\in\mathcal{R}_j xi​∈Rj​,即:

然后,需要确定区域 { R j } \{\mathcal{R}_j\} {Rj​}。因此,经验风险平方损失最小化涉及以下优化问题:

换句话说,我们正在最小化输入空间 X \mathcal{X} X 的所有可能的矩形分割 { R j } \{\mathcal{R}_j\} {Rj​}。事实证明,这个问题很难精确地解决。 在复杂性理论的语言中,它是NP-hard。

我们可以以 greedy 的方式进行,而不是精确地求解(2.87)。这种方法称为 递归二进制分割 recursive binary splitting

  • 我们从根节点开始,依次将其中一个维度中的输入空间分割为两个部分。这相当于通过将两个叶节点附加到一个选定的叶节点,将它们添加到树中,该叶节点现在成为一个内部节点。

  • 选择分割是为了使损失函数(如平方损失)在 当前 步骤最小化,无论未来的分割是否可能成为次优。这就是为什么它被称为贪心方法,因为它只关心最小化当前的错误,而不是未来的错误。

  • 在图2.6中,我们使用一维的例子来说明贪婪方法给出的次最优解。一个常见的停止标准是当每个分割区域只包含几个样本点时。

2.5.2 分类决策树

分类问题同样可以用决策树来处理。在这种情况下,我们仍然可以考虑假设空间(2.85),除了在优化过程中我们必须选择不同的值 { a j } \{a_j\} {aj​}。取代(2.86)中的平均值,我们通常使用 a j a_j aj​ 作为多数投票: 假设我们有一个 k k k 类的分类问题,其中标签可以取 { c 1 , c 2 , … , c K } \{c_1,c_2,… ,c_K\} {c1​,c2​,…,cK​} 然后我们可以设置 a j = c ˉ j a_j = \bar c_j aj​=cˉj​,其中 c ˉ j \bar c_j cˉj​ 是 R j \mathcal{R}_j Rj​ 中输入 最频繁 出现的类。 关系可以随意打破。

为了像以前一样执行递归二进制分割算法,我们需要一个分类性能指标,以便在每一步都可以选择分割的贪婪选择。一个很自然的选择是 分类错误率 ,但它对分裂不是很敏感,因此不适合构建良好的决策树。相反,我们将 p j k p_{jk} pjk​ 定义为 R j \mathcal{R}_j Rj​ 中属于k类的样本所占的比例,那么我们可以使用以下损失函数,也称为杂质的度量 impurity ,作为贪婪分裂的基础:

递归二进制分裂算法可以通过在每次分裂时 最小化损失/杂质 来进行类似的操作。

2.5.3 决策树的优缺点

决策树与我们以前见过的其他类型的模型有很大的不同。 那么,使用决策树有哪些优点和缺点呢? 下面我们给出一个不完整的列表。

  • 优点:

    • 能很容易地想象和理解预测
    • 通过分析分割来隐式特征选择,减少了误差/杂质的贡献
    • 对数据类型,监督学习任务和非线性关系 都比较稳健
  • 缺点:
    • 容易过度拟合
    • 对数据变化和平衡敏感
    • 贪婪算法可以找到次最优解的经验风险最小化

手写笔记





【机器学习基础】CH2 - 监督学习(5)决策树相关推荐

  1. 机器学习基础——实现基本的决策树

    一.决策树基本流程  决策树是常见的机器学习方法.我在学习周志华的机器学习的时候,用python实现了最基础的ID3算法,其基本思想是: 基于信息论中的信息增益理论,首先找出判断样本的最高的信息增益的 ...

  2. 机器学习基础——分类算法之决策树、随机森林、Titanic乘客生存分类

    目录 1 认识决策树 1.1 信息增益.信息熵的计算 1.2 举例计算​编辑 1.3 决策树的分类依据 1.4 sklearn决策树API 2 泰坦尼克号乘客生存分类 2.1 案例背景 2.2  数据 ...

  3. 机器学习基础(四)——决策树与随机森林

    决策树与随机森林 文章目录 决策树与随机森林 一.知识概要(一) 二.决策树使用的算法 三.sklearn决策树API 四.决策树的案例 1. 数据清洗 2. 特征工程 3. 调用决策树API 五.集 ...

  4. Python机器学习基础篇二《监督学习》

    前言 前期回顾: Python机器学习基础篇一<为什么用Python进行机器学习> 前面说过,监督学习是最常用也是最成功的机器学习类型之一.本章将会详细介绍监督学 习,并解释几种常用的监督 ...

  5. 【机器学习基础】用Python构建和可视化决策树

    作者|Nikhil Adithyan 编译|VK 来源|Towards Data Science 决策树 决策树是当今最强大的监督学习方法的组成部分.决策树基本上是一个二叉树的流程图,其中每个节点根据 ...

  6. Python机器学习基础篇三《无监督学习与预处理》

    前言 前期回顾: Python机器学习基础篇二<为什么用Python进行机器学习> 上面这篇里面写了文本和序列相关. 我们要讨论的第二种机器学习算法是无监督学习算法.无监督学习包括没有已知 ...

  7. python决策树剪枝_机器学习基础:可视化方式理解决策树剪枝

    看了一些市面上的经典教材,感觉决策树剪枝这一部分讲的都特别晦涩,很不好理解.本文以理论白话+具体案例的形式来讲清楚这个重要知识点,打好决策树这个基础,有助于理解之后我们要讲解的随机森林.gbdt.xg ...

  8. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  9. 《机器学习系列教程》:第二章 机器学习基础

    第二章 机器学习基础 机器学习and 数据分析 2.2 监督学习.非监督学习.半监督学习.弱监督学习? 根据数据类型的不同,对一个问题的建模有不同的方式.依据不同的学习方式和输入数据,机器学习主要分为 ...

最新文章

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
  2. AX2009报表打印固定长度Barcode条码
  3. chrome88 android,Chrome 88 的新特性
  4. python写appium测试用例找控件的方法总结
  5. linux dns chroot,chroot DNS 过程(包括一些简单的排错过程)
  6. Linux环境运行Jmeter
  7. Could not retrieve transaction read-only status from server
  8. Flutter入门进阶之旅(七)GestureDetector
  9. mysql dsec_MySQL基础(一)查询
  10. STM32-关于Proteus 仿真无法运行STM32CubeMX自动生成的代码
  11. 姿态估计(人体关键点检测)之CPN
  12. EDK2从搭建到运行
  13. Android 微信支付总结
  14. Cocoa Application-基础
  15. 查询所有的员工信息 和对应的部门信息
  16. ERDAS 2015 64位破解安装教程
  17. Mysql在表中添加约束条件
  18. 《eNSP - OSPF 查看命令》
  19. 单片机中psw的作用是什么?
  20. 团体程序设计天梯赛-练习集 L1-035 情人节

热门文章

  1. Android Unable to execute dex: method ID not in [0, 0xffff]: 65536 问题解决方法
  2. html中怎么写css代码,html style样式标签元素教程
  3. iOS-Mac下安装CocoaPods
  4. (转载)HCIA-GaussDB 华为认证数据库工程师
  5. 保留两位小数(四舍五入)
  6. 基于Webmagic的爬取B站用户数据的爬虫
  7. 如何删除电脑计算机用户名和密码,如何删除电脑设置的密码
  8. vlc播放g711 rtp流媒体sdp文件及其参数介绍
  9. GoogleChromePortable 谷歌chrome浏览器便携版官网下载方式
  10. 手机端自适应表格table样式如何写