文章目录

  • 决策树
  • 1. 基本概念
  • 2. 划分选择
  • 3. 剪枝处理
  • 4. 连续与缺失值
  • 5. 多变量决策树
  • 6. 拓展

决策树

  • 亦称为:判别树
  • 有时指学习方法。
  • 有时指学得的树。
  • 决策树是一种常见的机器学习方法。

1. 基本概念

  • 问题导入
举例:
- 以二分类任务为例。
- 我们希望从给定训练数据集学得一个模型,用以对新示例进行分类。
- 这个把样本分类的任务,可看作对"当前样本属于正类吗?"这个问题的"决策"或"判定"过程。子决策:
- 我们要对"这是好瓜吗?"这样的问题进行决策时。
- 通常会进行一系列的判断或"子决策":
- 我们先看"它是什么颜色?"。如果是"青绿色",
- 则我们再看"它的根蒂是什么形态?"。如果是"蜷缩",
- 我们再判断"它敲起来是什么声音?",
- 最后,我们得出"最终决策":这是个好瓜.

1.1 决策树的性质

- 一棵决策树包含"一个"根结点、若干个内部结点和若干个叶结点;
- "叶"结点对应于决策结果。
- 其他每个结点则对应于一个"属性"测试;
- 根结点包含"样本全集"。
- 从根结点到每个叶结点的路径对应了一个"判定测试序列"。

1.2 决策树学习的目的

- 决策树学习的"目的"是为了产生一棵"泛化能力"强的决策树。
- 即处理未见示例能力强的决策树。
- 其基本流程遵循简单且直观的"分而治之"(divide-and-conquer) 策略。
- 我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度" (purity) 高。

1.3 决策树学习基本算法

输入: 训练集 D = {(x1, y1), (x2, y2), (x3, y3), ..., (xm, ym)}属性集 A = {a1, a2, ..., ad}
过程: 函数 TreeGenerate(D, A)
1. 生成节点 node;
2. if D 中样本全属于同一类别 C then
3.      将 node 标记为 C 类叶节点:
4.      return;
5. end if
6. if A = null || D 中样本在 A 上取值相同 then
7.      将 node 标记为叶节点,其类别标记为 D 中样本数最多的类;
8.      return;
9. end if
10.从 A 中选择最优划分属性 ai (0 < i <= d);
11.for ai 的每一个值 a_vi do
10.     为 node 生成一个分支; 令 Dj (0 < j <= m) 表示 D 中在 ai 上取值为 a_vi 的样本子集;
11.     if Dj 为空 then
12.         将分支节点标记为叶节点,其类别标记为 D 中样本最多的类。
13.         return;
14.     else
15.         以 TreeGenerate(Dj, A\{ai}) 为分支节点
16.     end if
17.end for
输出:以 node 为根节点的一颗决策树
  • 算法解释
"名词解释:"
1. 机器学习2——绪论里面有专业名称的解释。
2. 训练集 D --> 数据集 data set
3. 属性集 A --> 属性 attribute
4. 一项数据:(x1, y1), 就有属性集 A 的全部
5. 最优划分属性 ai : 属性集 A 的子集, i 为下标,代表第几个属性
6. a_vi : attribute value, 所对应属性的属性值。
7. TreeGenerate(Dj, A\{ai}) : Dj 是已经训练好的一个节点,A\{ai} : ai 这个属性已经被用了,把它除去。"算法原理解释:"
- 决策树的生成是一个递归过程。
- "决策树学习的关键是" : 从 A 中选择最优划分属性 ai (0 < i <= d);
- 有三种情况会导致递归返回:
1. 当前节点包含的样本全属于同一类别,无须划分。
2. 当前属性集为空,或者所有样本在所有属性集上取值为空,无法划分。("处理:标记该节点为叶节点")
3. 当前节点包含的样本集合为空,不能划分("处理:标记该节点为叶节点")。 "第 2 种情况与第 3 种情况不一样"
- 在第 2 种情形下,我们把当前结点标记为叶结点,井将其"类别"设定为:该结点所含样本最多的类别。
- 在第 3 种情形下,同样把当前结点标记为叶结点,将其"类别"设定为:其父结点所含样本最多的类别。

2. 划分选择

  • 由1. 基本概念
- 训练决策树的"目的"是:
我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度" (purity) 高。- 决策树训练的算法"关键"为:
从 A 中选择最优划分属性 ai (0 < i <= d)
  • 所以划分选择的概念
- 决策树学习的关键是从 A 中选择最优划分属性 ai,即如何选择最优划分属性。
- 一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,
即结点的"纯度" (purity) 越来越高.

2.1 信息增益

  • 信息熵

定义

"信息熵" (information entropy)
- 是度量样本集合纯度最常用的一种指标。"例子:"
假定当前样本集合 D 中第 k 类样本所占的比例为 pk (k = 1, 2, ..., |y|) ,则 D 的信息熵定义为:

公式

结论

1. 若 p = 0, 则 plog2(p) = 0
2. Ent(D) 的最小值为 0, 最大值为 log2(|y|)
3. Ent(D) 的值越小,则 D 的纯度越高。
  • 信息增益

英文
information gain, 简写:Gain(D, a)

举例理解

"题意:"
假定离散属性 a 有 V 个可能的取值{a1, a2, ..., aV},
若使用 a 来对样本集合 D 进行划分,则会产生 V 个分支节点。
其中第 v 个分支节点包含了 D 中所有在属性 a 上取值为 av 的样本,记为 Dv。"计算出 Dv 的信息熵:"
Ent(Dv)"不同分支节点包含的样本数不同,给分支节点赋予权重"
|Dv|/|D|
(用意:样本数越多的分支节点影响越大)

公式

结论

1. 信息增益越大,属性 a 划分越优。
(则意味着使用属性 a 来进行划分所获得的"纯度提升"越大)
2. 我们可用"信息增益"来进行决策树的划分属性选择。
3. 著名的 ID3 决策树学习算法 [Quinlan 1986] 就是以信息增益为准则来选择划分属性。
4. "改进算法:" 从 A 中选择最优划分属性 ai (0 < i <= d);

  • 示例:训练得决策树

题目:以它为训练集,训练一颗决策树

计算信息熵:Ent

计算信息增益:Gain


计算得 “纹理” 的信息增益最大

以“清晰"为例

- 清晰中有编号为 {1, 2, 3, 4, 5, 6, 8, 10, 15} 9 个样例
- 可用属性集合为 {色泽,根蒂,敲声,脐部,触感 }
- 基于 D^1 计算出各属性的信息增益。

重复,直到所有属性,划分完毕
得到决策树:

  • 信息增益的缺点

缺点

信息增益准则对可取值数目较多的属性有所偏好

简单来说

就是一个属性它的"属性值"越多,"信息增益"越大。

解释

2.2 增益率

  • 与 信息增益 的作用一样

都是为了 选择划分属性

"由上可知:"
信息增益准则对可取值数目较多的属性有所偏好。"增益率"
- 为减少信息增益偏好可能带来的不利影响。
- 著名的 C4.5 决策树算法 [Quinlan 1993J 不直接使用信息增益,
- 而是使用"增益率" (gain ratio) 来选择最优划分属性。
  • 假如:把编号同样作为一个划分属性
- 在上面的介绍中,我们有意忽略了表 4.1 中的"编号"这一列。
- 若把编号同样作为一个划分属性。
- "编号"将产生 17 个分支,每个分支结点仅包含一个样本,这些分支结点的"纯度"己达最大.
- 但是,这样的决策树显然不具有"泛化"能力,无法对新样本进行有效预测。
  • 增益率公式

公式


由来

- 由信息增益改动而来
- 考虑到属性的取值数目

计算增益率

  • 增益率的缺点

缺点

增益率准则对可取值数目较少的属性有所偏好
  • 综合信息增益与增益率

信息增益与增益率结合

1. 先从候选划分属性中找出信息增益高于平均水平的属性,
2. 再从中选择增益率最高的。

2.3 基尼指数

  • 与 信息增益 的作用一样

都是为了 选择划分属性

- CART 决策树 [Breiman et al., 1984] 使用"基尼指数" (Gini index) 来选择划分属性。
- CART Classificationand Regression Tree 的简称,
- 这是一种著名的决策树学习算法,分类和回归任务都可用。
- 基尼指数一样可以"选择划分属性"。
  • 基尼值

公式

结论

1. Gini(D) "越小",则数据集 D 的"纯度越高"。
(Gini(D) 反映了从数据集 D 中随机抽取两个样本,其类别标记"不一致的概率")
  • 基尼指数

公式

改进算法
从 A 中选择最优划分属性 ai (0 < i <= d)

3. 剪枝处理

  • 问题导入
在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,
有时会造成决策树"分支过多",这时就可能因训练样本学得"太好"了,
以致于把训练集"自身"的一些"特点"当作所有数据都具有的"一般性质"而导致"过拟合".
因此,可通过主动"去掉一些分支"来降低过拟合的风险.
  • 目的
- 剪枝(pruning) 是决策树学习算法对付"过拟合"的主要手段.
- 目的为了提高决策树的"泛化能力"。
  • 操作方法
决策树剪枝的基本策略有"预剪枝" (pre-pruning) 和"后剪枝"(post-pruning) 。"预剪枝"
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,
若当前结点的划分不能带来决策树泛化性能提升,
则停止划分"并将当前结点标记为叶结点"."后剪枝"
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,
若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,
则将该"子树替换为叶结点".
  • 如何判断决策树泛化性能是否提升?

方法:

"留出法"
预留一部分数据用作"验证集"以进行性能评估

改动上述的西瓜数据集 2.0:

基于训练集得出的决策树:

具体方法看下面

3.1 预剪枝

  • 根据信息增益,首先对属性:脐部,进行预剪枝决策

划分前


划分前的验证集精度:

3/7 = 42.9%验证集里,一共 7 个样例,3 个正例。

划分后

划分后的验证集精度:

5/7 = 71.4%验证集一共 7 个样例,5 个样例由划分后的"部分决策树"验证正确。(包含判断出了坏瓜)

预剪枝决策:

  • 同理,对其他属性同样操作

色泽

预剪枝决策

根蒂

预剪枝决策

  • 由预剪枝得决策树

  • 结论
1. 上述预剪枝决策树的验证精度为:71.4%
2. 预剪枝使得决策树的很多分支都没有展开,降低了"过拟合"的风险。
3. 显著减少了决策树的"训练时间和测试时间"。
4. 有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能"暂时下降"。
5. 但在其基础上进行的后续划分却有可能导致"性能显著"提高。
6. 给预剪枝决策树带来了"欠拟含"的风险。

3.2 后剪枝

  • 先从训练集生成一棵完整决策树

计算验证集精度

3/7 = 42.9%一共 7 个样例,3 个由上述完整的决策树判断为正例。
  • 后剪枝首先从 6 号结点开始
1. 若将其领衔的分支剪除,则相当于把 6号结点 替换为叶结点.(相当于把纹理替换为好瓜或坏瓜)
2. 替换后的叶结点包含编号为 {7 15} 的训练样本。
3. 于是该叶结点的类别标记为"好瓜"。
4. 此时决策树的验证集精度提高至 57.1%.
5. 于是,后剪枝策略决定剪枝。
  • 重复操作,自下而上,判断所有结点

后剪枝决策树:


其验证集精度:

5/7 = 71.4%

结论:

1. 后剪枝决策树通常比预剪枝决策树保留了"更多的分支".
2. 一般情形下,后剪枝决策树的"欠拟合风险很小"。
3. 泛化能力"优于"预剪枝决策树。
4. 此其训练"时间开销"比未剪枝决策树和预剪枝决策树都要大得多.

4. 连续与缺失值

4.1 连续值处理

  • 连续属性与离散属性
- 上面所用的都是"离散属性"来生成决策树(如:"纹理")。(可理解为 点)
- 现实中往往都会遇到"连续属性"。(如:"密度 = 0.697")。(可理解为 线)
- 有必要讨论如何在决策树学习中"使用连续属性"。
  • 连续属性离散化技术
"问题描述:"
- 由于连续属性的"可取值数目"不再有限.
- 因此,不能直接根据连续属性的取值来对结点进行划分.
- 由此连续属性离散化技术可派上用场。"解决策略:"
采用"二分法"(bi-partition) 对连续属性进行处理"简单来说:"
就是规定一个划分点 t
>t , 划分为一个样例集
<t , 划分为一个样例集"怎样确定划分点:"
1. 把区间 [a^i, a^i+1) 的中位点作为"候选划分点"。
2. 像离散属性值一样来考察这些划分点。
3. 选取"最优的划分点"进行样本集合的划分。
  • 候选划分点集合

  • 连续属性——信息增益公式

  • 接着上面的例子

西瓜数据集 3.0

连续属性——密度

1. 计算候选划分点集合
(17 个密度属性取值,计算得到 16 个结果。)
Ta = {0.244, 0.294, 0.351, 0.381, 0.420, 0.459,
0.518, 0.574, 0.600, 0.621, 0.636,
0.648, 0.661, 0.681, 0.708, 0.746}2. 计算 16 次,算不同候选密度的信息增益3. 比较 16 个信息增益的大小,取最大值(得到 密度的信息增益)4. 比如:最大信息增益为 0.262.
- 那么密度的信息增益为 0.262
- 对应的点为 0.381
- 0.381 就是最优划分点 t

难点:算不同候选密度的信息增益
(以 0.381 为例)

  • 生成决策树

4.2 缺失值处理

  • 问题导入
- 现实任务中常会遇到不完整样本,即样本的某些"属性值缺失"。
- "例如:"由于诊测成本、隐私保护等因素,患者的医疗数据在某些属性上的取值(如 HIV 测试结果)未知。
- 如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对"数据信息极大的浪费"。
例子如下:
  • 有缺失属性值的西瓜数据集

  • 需解决的两个问题
(1) 如何在属性值缺失的情况 进行划分属性选择?
(2) 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
  • 用到的特点名词

数学符号

1. D'
给定训练集 D 和属性 a
令 D' 表示 D 中在属性 a 上没有缺失值的样本子
集2. D'v
假定属性 a 有 V 个可取值 {a1, a2, a3, ..., aV}
D'v 表示 D' 中在属性 a 上的取值为 av 的样本子集3. D'k
D'k 表示 D' 中属于第 k 类(k = 1, 2, ..., |y|)的样本子集为每个样本 x 赋予一个权重 wx, 并定义:
4. p
p 表示无缺失值样本所占的比例5. p'k
p'k 表示无缺失值样本中第 k 类所占的比例6. r'v
r'v 表示无缺失值样本中在属性 a 上取值为 av 的样本所占的比例

推广信息增益公式

  • 对于问题(1)
我们仅可根据 D' 来判断属性 a 的"优劣".
  • 对于问题(2)
"具体操作:"
1. 若样本 x 在划分属性 a 上的取值己知
- 则将样本 x 划入与其取值对应的子结点
- 且样本权值在子结点中保持为 ωx.2. 若样本 x 在划分属性 a 上的取值未知
- 将 x 同时划入所有子结点
- 且样本权值在与属性值 av 对应的子结点中调整为 r'v * wx
("直观来说")让同一个样本以不同的"概率"划入到不同的子结点中去.
  • 实际例子——表4.4

已知:

样本集 D 中全部 17 个样例,各样例的权值均为1

以”色泽“为例:

该属性上的无缺失值的样例子集 D' :
D' = {2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17},
共 14 个样例,6 个正例, 8 个反例

D’ 的信息熵为:


D’ 上属性 ”色泽“ 的信息增益

D 上属性 ”色泽“ 的信息增益

同理,计算出其他所有属性在 D 上的信息增益

  • 很巧合的是:我们遇到了问题(2)
1. "纹理"在所有属性中取得了最大的倍息增益,被用于对根结点进行划分.
2. 编号为 {8, 10} 的样本在属性"纹理"上出现了缺失值
解决方案如下:

  • 最终的决策树

5. 多变量决策树

  • 分类边界
- 若我们把每个属性视为坐标空间中的一个坐标轴,则 d 个属性描述的样本
就对应了 d 维"空间"中的一个数据点。
- 对样本分类则意味着在这个坐标空间中寻找不同类样本之间的"分类边界"。
  • 找分类边界的例子

数据集:

训练得决策树:
(方法:连续值的处理)

作图:作出分类边界

  • 多变量决策树

概念:

- "多变量决策树" (multivariate decision tree) 就是能实现"斜划分"甚至更复杂划分的决策树。

例如:


结论:

- 红色段就是我们需要的"斜的划分边界"。
- 在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性。
- 而是试图建立一个合适的"线性分类器"。
  • 多变量决策树的例子

6. 拓展

  • 为什么是上述的那些公式?

为什么要用这个数学公式呢?
y=xlog2(x)y = xlog2(x)y=xlog2(x)

  • 多变量决策树的生成方法?

  • 决策树学习的经典代表

1. ID3 基于 信息增益
2. CART 基于 基尼系数"多变量决策树算法主要有:"
OC1 :
先贪心地寻找每个属性的最优权值,
在局部优化的基础上再对分类边界进行随机扰动以试图找到更好的边界;
  • 决策树算法日益跟进

亮点1:结合神经网络

还有一些算法试图在决策树的叶结点上嵌入神经网络,以结合这两种学习机制的优势,
例如"感知机树" (Perceptron tree) 在决策树的每个叶结点上训练一个感知机。

亮点2:增量学习

在接收到新样本后可对己学得的模型进行调整,而不用完全重新学习.代表算法
1. ID4
2. ID5R
3. ITI

机器学习5——决策树相关推荐

  1. Scikit-Learn 机器学习笔记 -- 决策树

    Scikit-Learn 机器学习笔记 – 决策树 参考文档: handson-ml import numpy as np# 加载鸢尾花数据集 def load_dataset():from skle ...

  2. 机器学习实战-决策树-22

    机器学习实战-决策树-叶子分类 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplo ...

  3. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...

    机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  4. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型

    [火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplo ...

  5. gini系数 决策树_案例7:机器学习--使用决策树实现泰坦尼克号乘客生存率预测...

    一.决策树简介 1.1 什么是决策树? 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树. ...

  6. 机器学习实战 —— 决策树(完整代码)

    声明: 此笔记是学习<机器学习实战> -- Peter Harrington 上的实例并结合西瓜书上的理论知识来完成,使用Python3 ,会与书上一些地方不一样. 机器学习实战-- 决策 ...

  7. 【机器学习】决策树(Decision Tree)

    [机器学习]k近邻算法(KNN) [机器学习]决策树(Decision Tree) [机器学习]朴素贝叶斯(Naive Bayes) 一.概述 决策树(Decision Tree)是有监督学习中的一种 ...

  8. 机器学习中决策树的随机森林_决策树和随机森林在机器学习中的使用

    机器学习中决策树的随机森林 机器学习 (Machine Learning) Machine learning is an application of artificial intelligence ...

  9. 机器学习之决策树原理

    机器学习之决策树原理 1 决策树简介 2 数学知识 ① 信息熵 ② 条件熵 ③ 信息增益 ④ 信息增益比(信息增益率) ⑤ 基尼指数(基尼系数) 3 决策树的构建过程 4 三种决策树算法 ① ID3 ...

  10. [机器学习数据挖掘]机器学习实战决策树plotTree函数完全解析

    [机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析 http://www.cnblogs.com/fantasy01/p/4595902.html点击打开链接 import ...

最新文章

  1. 对象特性-----拷贝构造函数的调用
  2. 万物新生(爱回收)递交赴美上市招股书,平台服务收入年复合增长达627.7%
  3. Java static initialization研究
  4. 【算法设计与分析】02 货郎问题与计算复杂性理论
  5. PHP+Mysql+jQuery实现发布微博程序--PHP篇
  6. wdcp 无法更换php,wdcp降级到php5.2后Zend Optimizer失效的解决办法
  7. 桌面版docker操作_10分钟快速掌握Docker必备基础知识
  8. iOS 开发者证书总结 in-house
  9. 一个简单的Windows
  10. 浏览器检测 vs 特性检测
  11. 品优购-01分布式框架-Dubbox
  12. Mac 复制 粘贴问题
  13. Docker基础知识及安装部署
  14. 【超详细教程(附源码)】基于 ARM Cortex-M3 处理器与 FPGA 的实时人脸检测 SOC
  15. 喜马拉雅随车听开通啦
  16. IP和局域网 简单了解
  17. Writing a Cause and Effect Essay
  18. 关于几篇数据挖掘的文章(2)
  19. 一文看尽微信AI团队打造扫一扫植物识别利器
  20. 案例21:Java农产品供求信息系统设计与实现开题报告

热门文章

  1. java实现使用POI对word文档的页眉页脚的编辑
  2. 冻结表格模板html,Excel冻结单元格(锁定单元格)用选项和快捷键,含冻结一个、多个和有公式的单元格及冻结表格格式不能输入...
  3. 登陆验证java代码怎么写_实现AJAX+JAVA用户登陆注册验证的代码
  4. php大量邮件,PHPMailer批量发送邮件的实例代码
  5. 【codevs4093】 EZ的间谍网络 强连通分量+tarjan缩点
  6. 计算机领域媒体的分类有,多媒体信息主要有几种类型
  7. 组合数学+概率,期望+生成函数一文全精通
  8. ThoughtWorks笔试题大致解题思路总结
  9. HITB 2020:二进制漏洞挖掘仍是会议主流方向
  10. 以赛促产 以赛引才 |第六届世界智能大会·中国华录杯数据湖算法大赛正式启动