文章目录

  • 参考资料
  • 1. 基本概念
  • 2. 决策树的构造
  • 3. ID3算法(使用信息增益)
  • 4. C4.5算法(使用增益率)
  • 5. CART算法(使用基尼系数)
    • 三种不同的决策树算法小结
  • 6. 剪枝处理
  • 7. 连续值与缺失值处理
    • 7.1 连续值处理
    • 7.2 缺失值处理
  • 8. 后记
    • 1. 树形结构为什么不需要归一化?
    • 2. 分类决策树和回归决策树的区别

参考资料

  1. Machine-learning-learning-notes
  2. LeeML-Notes
  3. ML-NLP

本博客为作者根据周志华的西瓜书和参考资料1、2、3所做的笔记,主要用于学习,非技术类博客,因此存在大量复制粘贴,请见谅。

决策树代码实现示例见于github仓库

1. 基本概念

决策树是基于树结构来进行决策的。

例如:

决策树中决策过程的每一次判定都是对某一属性的“测试”,决策最终结论则对应最终的判定结果。一般一棵决策树包含:一个根节点、若干个内部节点和若干个叶子节点,易知:

  • 每个非叶节点表示一个特征属性测试。
  • 每个分支代表这个特征属性在某个值域上的输出。
  • 每个叶子节点存放一个类别。
  • 每个节点包含的样本集合通过属性测试被划分到子节点中,根节点包含样本全集。

2. 决策树的构造

决策树的构造是一个递归的过程,有三种情形会导致递归返回:

(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;

(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;

(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

算法的基本流程如下图所示:


可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。

属性划分的目标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别。因此下面便是介绍量化纯度的具体方法,决策树最常用的算法有三种:ID3,C4.5和CART

3. ID3算法(使用信息增益)

ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为pk(k=1,2,...,∣γ∣)p_k(k=1,2,...,|\gamma|)pk​(k=1,2,...,∣γ∣),则样本集合D的信息熵定义为:

假 定 离 散 属 性 a 有 V 个 可 能 的 取 值 a1,a2,...,aV{a^1,a^2,...,a^V}a1,a2,...,aV , 若 使 用 a 来 对 样 本 集 D进 行 划 分 , 则 会 产 生 V 个 分 支 结 点 , 其 中 第 v 个 分 支 结 点 包 含 了 D 中 所 有 在属 性 a 上 取 值 为 ava^vav 的 样 本 , 记 为 DvD^vDv. 易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。于 是 可 计 算 出 用 属 性 a 对 样 本 集 D 进 行 划 分 所 获 得 的 “ 信 息 增 益 “(information gain)

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

4. C4.5算法(使用增益率)

ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。

首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率,增益率定义为:

称 为 属 性 a 的 “固有值” (intrinsic value)。属性a的可能取 值 数 目 越 多 ( 即 V 越 大 ), 则 IV(a) 的 值 通 常 会 越 大 .

5. CART算法(使用基尼系数)

CART(Classification And Regression Tree)决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,基尼指数定义如下:

进而,使用属性α划分后的基尼指数为:

于 是 , 我 们 在 候 选 属 性 集 合 A中 , 选 择 那 个 使 得 划 分 后 基 尼 指 数 最 小 的 属性 作 为 最 优 划 分 属 性 , 即 a∗=arg min⁡a∈Aa^* = \argmin_{a\in A}a∗=a∈Aargmin​ Gini_index(D, a)。

示例

假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,

当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下:

1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}

2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}

3.划分点: “硕士”,划分后的子集合 : {博士},{本科,硕士}}

对于上述的每一种划分,都可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度:

因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)

然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。到此就可以长成一棵“大树”了。

三种不同的决策树算法小结

  • ID3:取值多的属性,更容易使数据更纯,其信息增益更大。

    训练得到的是一棵庞大且深度浅的树:不合理。

  • C4.5:采用信息增益率替代信息增益。

  • CART:以基尼系数替代熵,最小化不纯度,而不是最大化信息增益

6. 剪枝处理

从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过的问题:过拟合(overfitting),即太依赖于训练样本。

剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以将数据集划分为训练集和测试集。

预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。

后剪枝则表示在构造好一颗完整的决策树后,自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶子结点能带来决策树泛化性能提升,则将该子树替换为叶结点,类别标记为其包含样本最多的类别。

预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险

而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升

7. 连续值与缺失值处理

7.1 连续值处理

对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法基本思想为:给定样本集D与连续属性a,二分法试图找到一个划分点t将样本集D在属性a上分为≤t≤t≤t与>t>t>t。

  • 首先将a的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为a所有的取值数目)。

  • 计算每一个划分点划分集合D(即划分为两个分支)后的信息增益。

  • 选择最大信息增益的划分点作为最优划分点。

7.2 缺失值处理

现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解决两个问题:

(1)如何选择划分属性。

(2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。


注意,根节点中的权重初始化为1。

对于问题(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即:

对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在分支节点中的权重变为:

8. 后记

1. 树形结构为什么不需要归一化?

因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。

既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化。

对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。

2. 分类决策树和回归决策树的区别

Classification And Regression Tree(CART)是决策树的一种,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),两者在建树的过程稍有差异。

回归树

参考:https://blog.csdn.net/suipingsp/article/details/42264413

CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。

CART回归树实质上就是在该特征维度对样本空间进行划分,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:


因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:

所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。

【周志华机器学习】四、决策树相关推荐

  1. 周志华机器学习:决策树

    决策树 文章目录 决策树 参考 基本流程 划分选择 信息增益 决策树的生成--ID3,及其问题 增益率 决策树生成 --C4.5,及其问题 剪枝处理 预剪枝和后剪枝 统计学习方法中的剪枝 CART算法 ...

  2. 周志华机器学习-决策树

    周志华机器学习-决策树 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周志华机器 ...

  3. 周志华机器学习--绪论

    周志华机器学习–绪论 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周志华机器学 ...

  4. 周志华机器学习(西瓜书)学习笔记(持续更新)

    <周志华机器学习>笔记 第1章 绪论 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 1.5 发展历程 1.6 应用现状 第2章 模型评估与选择 2.1 经验误差与过拟 ...

  5. 周志华机器学习--模型评估与选择

    周志华机器学习–模型评估与选择 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周 ...

  6. 周志华机器学习-支持向量机

    周志华机器学习-支持向量机 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 – 文章目录 周 ...

  7. 周志华-机器学习西瓜书-第三章习题3.3 编程实现对率回归

    本文为周志华机器学习西瓜书第三章课后习题3.3答案,编程实现对率回归,数据集为书本第89页的数据 使用tensorflow实现过程 # coding=utf-8 import tensorflow a ...

  8. 周志华机器学习(6):支持向量机

    周志华机器学习(6):支持向量机 6 支持向量机 6.1 间隔与支持向量 6.2 对偶问题(dual problem) 6.3 核函数 6.4 软间隔与正则化 基本是大段摘录西瓜书加上一些自己的解释补 ...

  9. 【读书笔记】周志华 机器学习 第二章 模型评估和选择

    第二章 模型评估和选择 1 欠拟合和过拟合 偏差和方差 1.1 欠拟合和过拟合 1.2 偏差和方差 2 评估方法 性能度量 2.1 评估方法 2.1.1 留出法 2.2.2 交叉验证法 2.2.3 自 ...

最新文章

  1. 在VS中建立一个易于管理的C++工程
  2. python android自动化元素定位_linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例...
  3. ulimit限制 新系统_系统限制ulimit学习
  4. python的代码有哪些_Python有哪些有趣的代码呢,这些代码让
  5. 使用TensorFlow 2.0+和Keras实现AlexNet CNN架构
  6. obj文件编辑软件_工程动画制作 | MAX文件导出obj、fbx格式在Bentley软件中应用
  7. Tensorflow逻辑回归处理MNIST数据集
  8. linux-x86_64 error,Linux-x86_64 Error: 5: Input/output error的问题
  9. vue、cnpm不是内部文件_UBoot链接文件 搞懂程序内部长什么样
  10. js课程 2-6 js如何进行类型转换及js运算符有哪些
  11. tp3.2 模型实例化
  12. 面试官系列:前端高频面试题汇总 | Vue面试题
  13. 隐藏部分内容,点击按钮显示全部内容
  14. @Modifying 注解
  15. PTA---L2-016 愿天下有情人都是失散多年的兄妹(深度优先)
  16. 服务器抓不到mrcp协议,mrcp与一句话识别
  17. tomcat7的下载和安装配置
  18. html5四季特点,美国一年四季天气特点介绍
  19. python读取svg_使用Python / PIL读取SVG文件
  20. RTOS内功修炼记(二)—— 优先级抢占调度到底是怎么回事?

热门文章

  1. 计算机网络传输层简介
  2. 广州蝶梦网络科技有限公司的互联网意义
  3. c语言路径搜索,c语言程序(单元路劲及多元路径的搜索)
  4. 全国计算机二级抵免自考,自考计算机可以抵免吗?
  5. winform中TreeView显示树状图
  6. 【滤波跟踪】Singer-Kalman模型下的机动目标跟踪算法含Matlab源码
  7. python预测未来数据步骤_大神教你用Python预测未来:一文看懂时间序列(值得收藏)...
  8. OpenGL 实现 RGBA 转 I420
  9. RGB 与 BGR 颜色深度、像素和字节之间的关系
  10. 高校微信小程序开发心得