决策树学习

决策树学习

决策树

决策树基础

适用决策树学习的经典目标问题

  • 带有非数值特征的分类问题(主要是非连续)
  • 离散特征
  • 没有相似度概念(没有明确相似度概念)
  • 特征无序

另一个例子: 水果

  • 颜色:红色、绿色、黄色......
  • 大小:小、中、大
  • 形状:球形、细长
  • 味道:甜、酸

样本的表示

  • 属性的列表而非数值向量
  • 例如享受运动的例子:
    • 6值属性:天气、温度、湿度、风、水温、预测天气
    • 某一天的天气实例:{晴、暖、一般、强、暖、不变}
  • 例如水果的例子:
    • 4值元组:颜色、大小、形状、味道
    • 某个水果的实例: {红、球形、小、甜}

训练样本

训练样本就是在样本表达的基础上加上目标取值C(x), 如西瓜

决策树的概念

天生带有可解释性。

发展历史

  • 1966,由Hunt首先提出
  • 1970's~1980's
    • CART 由Friedman, Breiman提出
    • ID3 由 Quinlan 提出
  • 自1990's以来
    • 对比研究、算法改进(Mingers, Dietterich, Quinlan, etc.)
    • 最广泛使用的决策树算法:C4.5 由 Quinlan 在 1993 年提出
  • C5.0

经典决策树算法

ID3算法

  • 自顶向下,贪心搜索
  • 递归算法
  • 核心循环:
    • A :下一步最佳 决策属性
    • 将 A 作为当前节点决策属性
    • 对属性A (vi)的每个值,创建与其对应的新的子节点
    • 根据属性值将训练样本分配到各个节点
    • 如果 训练样本被完美分类,则退出循环,否则继续下探分裂新的叶节点

训练样本被完美分类: 就是所有节点很好的分类了(比如所有叶子节点的标签都一样),看后面的 **ID3 Q2: 何时返回(停止分裂节点)?**内容

属性选择和节点混杂度(Impurity)

ID3 Q1: 哪个属性是最佳属性?

一共29个正例,35个负例,A~1~为最佳属性时,取True的有21个正例5个负例,A~1~取False的有8个正例30个负例;A~2~为最佳属性时,取True的有18个正例33个负例,A~2~取False的有11个正例2个负例

比如A~1~是湿度,湿度大还是正常,A ~2~是风,风是强还是正常

当前最佳属性节点选择
  • 基本原则: 简洁
    • 我们偏向于使用简洁的具有较少节点的树
      比如西瓜和柠檬,依据简洁原则,选择左边的,最佳属性color
  • 基本原则: 简洁
    • 我们偏向于使用简洁的具有较少节点的树
    • 在每个节点N上,我们选择一个属性T,使得到达当前派生节点的数据尽可能"纯"(尽可能是同样分类的, 比如上面的颜色,左边就是西瓜,右边就是柠檬,如果是大小,右边既有西瓜,也有柠檬,就不太纯)
    • 纯度(purity)- 混杂度(impurity)

如何衡量混杂度?

熵(Entropy)(广泛使用)

E n t r o p y ( N ) = − ∑ j P ( w j ) l o g 2 P ( w j ) Entropy(N) = -\sum\limits_j P(w_j)log_2P(w_j) Entropy(N)=−j∑P(wj)log2P(wj)

(比如节点是size, 那w1就是大,w2就是小)

  • 定义: 0log0 = 0(可能某个节点是没取值,那概率P(w~j~)可能是0,因log原因,需要这样定义,否则无意义)
  • 在信息理论中,熵度量了信息的纯度/复杂度 ,或者信息的不确定性
  • 正态分布 - 具有最大的熵值

横坐标为取正的概率,如果正的概率为0,则熵为0,取负的概率为100%;正例的概率为0.5时,熵值最大

如果只有两个,熵 = 正例的 − P ( w j ) l o g 2 P ( w j ) -P(w_j)log_2P(w_j) −P(wj)log2P(wj) + 负例的 − P ( w j ) l o g 2 P ( w j ) -P(w_j)log_2P(w_j) −P(wj)log2P(wj),

0.993已经很接近1, 说明熵很大

除了熵以外的其它混杂度度量

  • Gini混杂度(Duda 倾向于使用Gini混杂度) 基尼
    混杂度 i ( N ) = ∑ i ≠ j P ( w i ) P ( w j ) = 1 − ∑ j P 2 ( w j ) 混杂度i(N)=\sum\limits_{i \neq j} P(w_i)P(w_j)=1-\sum\limits_jP^2(w_j) 混杂度i(N)=i=j∑P(wi)P(wj)=1−j∑P2(wj)
  • 错分类混杂度(miss-classification)
    混杂度 i ( N ) = 1 − max ⁡ j P ( w j ) 混杂度i(N)=1-\max\limits_jP(w_j) 混杂度i(N)=1−jmaxP(wj)(所有中,j的概率最大)
混杂度(熵)

E n t r o p y ( N ) = − ∑ j P ( w j ) l o g 2 P ( w j ) Entropy(N) = -\sum\limits_j P(w_j)log_2P(w_j) Entropy(N)=−j∑P(wj)log2P(wj)

下面坐标轴,依图例,蓝色纵坐标看右边,红色看左边

熵越来越大

混杂度(Gini)

i ( N ) = ∑ i ≠ j P ( w i ) P ( w j ) = 1 − ∑ j P 2 ( w j ) i(N)=\sum\limits_{i \neq j} P(w_i) P(w_j) = 1 - \sum\limits_jP^2(w_j) i(N)=i=j∑P(wi)P(wj)=1−j∑P2(wj)

最大 Gini 混杂度 在 1 − n ∗ ( 1 / n ) 2 = 1 − 1 / n 1-n*(1/n)^2=1-1/n 1−n∗(1/n)2=1−1/n 时取得

混杂度 (错分类)

i ( N ) = 1 − max ⁡ j P ( w j ) i(N) = 1 - \max\limits_jP(w_j) i(N)=1−jmaxP(wj)

最大 Gini 混杂度 在 1 − n ∗ ( 1 / n ) 2 = 1 − 1 / n 1-n*(1/n)^2=1-1/n 1−n∗(1/n)2=1−1/n时取得 (也就是均匀分布P(W~i~) = 1/n)
在有n类时,最大错分类混杂度 = 最大Gini混杂度 1 − m a x { 1 / n } = 1 − 1 / n 1-max\{1/n\}=1-1/n 1−max{1/n}=1−1/n

度量混杂度的变化 Δ I ( N ) ΔI(N) ΔI(N) --- 信息增益(IG,Information Gain)

例如

  • 由于对A的排序整理带来的熵的期望减少量

    根据公式计算,得 E n t r o p y ( s a 1 = t ) = − 21 26 ∗ l o g 2 21 26 − 5 26 ∗ l o g 2 5 6 = 0.706 Entropy(s_{a1=t}) = -\frac{21}{26}*log_2{\frac{21}{26}}-\frac{5}{26}*log_2{\frac{5}{6}}=0.706 Entropy(sa1=t)=−2621∗log22621−265∗log265=0.706,即下面最左叶子节点的熵。


    (21+5)/(29+35) = 26/64, 即上面最左叶子节点的重要性

因为 G a i n ( S , A 1 ) > G a i n ( S , A 2 ) Gain(S,A_1) > Gain(S, A_2) Gain(S,A1)>Gain(S,A2),所以选择A1节点(因为熵减少的更多,信息增益更大)

ID3 Q2: 何时返回(停止分裂节点)?
  • "如果训练样本被完美分类"

  • 情形 1: 如果当前子集中所有数据 有完全相同的输出类别,那么终止

  • 情形 2: 如果当前子集中所有数据 有完全相同的输入特征,那么终止

    • (可能性1.有噪声,需要判断,如果很多,数据不好,需要做数据清洗,如果少,不影响,很少有很干净的数据,大多数的机器学习都需要有这样的鲁棒性2.很重要的Feature(特征)漏掉了)
  • 可能的情形3: 如果 所有属性分裂的信

    息增益为0, 那么终止 -------------这是个好想法么?决策树中不会采用这样的策略, 看下面的例子

函数y=a XOR b

a b y
0 0 0
0 1 1
1 0 1
1 1 0

信息增益:

属性 概率分布 IG
a 0 50% 0
a 1 50% 0
b 0 50% 0
b 1 50% 0
  • 根据提出的情形3,甚至在第一步就无法选择任何属性

如果不考虑情形3,随机一个属性就可以构建决策树,

因此在ID3中,只有两种情形会停止分裂(即完美分类),

  • 相同的输出类别

  • 相同的输入特征值

ID3举例
  • 训练样本
    - 选择特征 基于湿度、天气、温度、云这几个属性就可以计算出IG如下: G a i n ( S , H u m i d i t y ) = 0.940 - [ ( 7 / 14 ) ∗ 0.985 + ( 7 / 14 ) ∗ 0.592 ] = 0.151 Gain(S,Humidity) =0.940-[(7/14)*0.985 + (7/14)*0.592] =0.151 Gain(S,Humidity)=0.940-[(7/14)∗0.985+(7/14)∗0.592]=0.151
    G a i n ( S , O u t l o o k ) = 0.246 Gain(S,Outlook)=0.246 Gain(S,Outlook)=0.246
    G a i n ( S , W i n d ) = 0.048 Gain(S,Wind)=0.048 Gain(S,Wind)=0.048
    G a i n ( S , T e m p e r a t u r e ) = 0.029 Gain(S,Temperature)=0.029 Gain(S,Temperature)=0.029
    Outlook的IG最大,因此讲Outlook作为当前节点的属性

ID3算法搜索的假设空间

  • 假设空间是完备的

    • 目标函数一定在假设空间里
    • 既可以处理属性的OR,也可以处理属性的AND,因此是完备的,任何一个逻辑表达,在ID3的树里都可以表达
  • 输出单个假设

    • 不超过20个问题(根据经验) ,即影响因素(属性)不要超过20个,
    • 否则非常复杂, 也会产生过拟合(超过20个决策性属性)
  • 没有回溯

    • 局部最优,不是全局最优
  • 在每一步中使用子集的所有数据(比如之前的梯度下降,用一条数据就调整,和这里不一样)

    • 数据驱动的搜索选择
    • 对噪声数据有鲁棒性
ID3中的归纳偏置 (Inductive Bias)
  • 假设空间 H 是作用在样本集合 X 上的
    • 没有对假设空间作限制, 假设空间不偏
  • 偏向于在靠近根节点处的属性具有更大信息增益的树
    • 尝试找到最短的树
    • 该算法的偏置在于对某些假设 具有一些偏好(preference, 搜索偏置) , 而不是
      假设空间 H 做限制(restriction描述偏置).

搜索偏置原理:
奥卡姆剃刀(Occam's Razor)*
:偏向于符合数据的最短的假设

Domingos, The role of Occam's Razor in knowledge discovery. Journal of Data Mining and Knowledge Discovery, 3(4), 1999.
一般认为:一般无偏的学习算法是无用的

CART (分类和回归树)

Classification and Regression Tree

  • 一个通用的框架 :
    • 根据训练数据构建一棵决策树
    • 决策树会逐渐把训练集合分成越来越小的子集
    • 当子集纯净后不再分裂
    • 或者接受一个不完美的决策

许多决策树算法都在这个框架下,包括ID3、C4.5等等

过拟合问题(over-fitting)

c错误率为0,过于拟合,泛化()能力变弱

  • 我们说假设 h ∈ H h ∈H h∈H 对训练集过拟合 ,如果存在另一个假设 h ' ∈ H h' ∈H h'∈H满足:
    e r r t r a i n ( h ) < e r r t r a i n ( h ′ ) err_{train}(h) < err_{train}(h^{'}) errtrain(h)<errtrain(h′) AND e r r t e s t ( h ) > e r r t e s t ( h ′ ) err_{test}(h) > err_{test}(h^{'}) errtest(h)>errtest(h′), 那h就是过拟合了
    如果没有测试集,那就用验证集做衡量

决策树过拟合的一个极端例子:

  • 每个叶节点都对应单个训练样本 ------ 每个训练样本都被完美地分类

  • 整个树相当于仅仅是一个数据查表算法的简单实现

  • 决策树学习中的过拟合

    上如中22以后,训练集精度还在增加,但是测试集精度已经在下降了,说明过拟合了

如何避免过拟合

  • 对决策树来说有两种方法避免过拟合
    • I 当数据的分裂在统计意义上并不显著时,就停止增长:预剪枝
    • II 构建一棵完全树,然后做后剪枝

类型 I.

对于第一种方法,很难估计树的大小

预剪枝

何时停止分裂(1) :基于样本数
  • 通常 一个节点不再继续分裂 ,当:
    • 到达一个节点的训练样本数小于训练集合的一个特定比例 (例如 5%)
    • 无论混杂度或错误率是多少
    • 原因:基于过少数据样本的决定会带来较大误差和泛化错误
何时停止分裂(2):基于信息增益的阈值

设定一个较小的阈值,如果满足下述条件则停止分裂: Δ i ( s ) ≤ β \Delta i(s) \leq \beta Δi(s)≤β

  • 优点:
    • 用到了所有训练数据
    • 叶节点可能在树中的任何一层
  • 缺点: 很难设定一个好的阈值

避免过拟合: 类型 II

对于方法 II:

  • 如何选择 "最佳" 的树?
    • 在另外的验证集合上测试效果
  • M D L ( M i n i m i z e D e s c r i p t i o n L e n g t h 最小描述长度 ) MDL (Minimize Description Length 最小描述长度) MDL(MinimizeDescriptionLength最小描述长度):
    m i n i m i z e ( s i z e ( t r e e ) + s i z e ( m i s c l a s s i f i c a t i o n s ( t r e e ) ) ) minimize ( size(tree) + size(misclassifications(tree)) ) minimize(size(tree)+size(misclassifications(tree)))
后剪枝 (1): 错误降低剪枝
  • 把数据集分为训练集验证集
    • 验证集:
      • 已知标签
      • 测试效果
      • 在该集合上不做模型更新!
  • 剪枝直到再剪就会对损害性能:
    • 在验证集上测试剪去每个可能节点(和以其为根的子树)的影响
    • 贪心地去掉某个可以提升验证集准确率 的节点

如何定义新的叶节点的标签?

剪枝后新的叶节点的标签赋值策略
  • 赋值成最常见的类别
  • 给这个节点多类别的标签
    • 每个类别有一个支持度 (根据训练集中每种标签的数目)
    • 测试时: 依据概率选择某个类别或选择多个标签
  • 如果是一个回归树 (数值标签),可以做平均或加权平均
  • ......
错误降低剪枝的效果
后剪枝 (2): 规则后剪枝
  1. 把树转换成等价的由规则构成的集合
    • e.g. if (outlook=sunny) and (humidity=high) then playTennis = no
  2. 对每条规则进行剪枝,去除哪些能够提升 该规则准确率的规则前件
    • i.e. (outlook=sunny), (humidity=high)
  3. 将规则排序成一个序列 (根据规则的准确率从高往低排序)
  4. 该序列 中的最终规则对样本进行分类(依次查看是否满足规则序列)

(注:在规则被剪枝后,它可能不再能恢复成一棵树 )
一种被广泛使用的方法,例如C4.5

为什么在剪枝前将决策树转化为规则?
  • 独立于上下文
    • 否则,如果子树 被剪枝,有两个选择:
      • 完全删除该节点
      • 保留它
  • 不区分根节点和叶节点
  • 提升可读性

扩展: 现实场景中的决策树学习•问题 & 改进

1. 连续属性值

  • 建立一些离散属性值
  • 可选的策略:
    • I.选择相邻但有不同决策的值中间值 x S = ( x l + x u ) / 2 x_S=(x_l+x_u)/2 xS=(xl+xu)/2
      (Fayyad 在1991年证明了满足这样条件的阈值可以信息增益IG最大化)
    • II. 考虑概率 x S = ( 1 − P ) x l + P x u x_S = (1-P)x_l+Px_u xS=(1−P)xl+Pxu

2. 具有过多取值的属性

问题:

  • 偏差: 如果属性有很多值,根据信息增益IG,会优先被选择
    • e.g. 享受运动的例子中,将一年里的每一天作为属性
  • 一个可能的解决方法: 用 GainRatio(增益比) 来替代

3. 未知属性值


4. 有代价的属性

• 有时有的属性不容易获得(收集该属性值的代价太大)

  • Tan & Schlimmer(1990) G a i n 2 ( S , A ) C o s t ( A ) \frac{Gain^2(S,A)}{Cost(A)} Cost(A)Gain2(S,A)
  • Nunez(1988) 2 G a i n ( S , A ) − 1 ( C o s t ( A ) + 1 ) w \frac{2^{Gain(S,A)}-1}{(Cost(A)+1)^w} (Cost(A)+1)w2Gain(S,A)−1
    • w:[0,1] 代价的重要性

其他信息

小结

  • 介绍及基本概念

    • 以ID3算法为例
      • 算法描述
      • 选择特征
      • 终止条件
      • ID3算法的归纳偏置
    • 过拟合问题
    • 剪枝
      • 预剪枝:基于样本数;基于信息增益阈值
      • 后剪枝: 错误降低剪枝;规则后剪枝

    在实际应用中,一般预剪枝更快,而后剪枝得到的树准确率更高

  • 扩展

    • 实际场景中的决策树学习
      • 连续属性值的离散化
      • 具有过多取值的属性处理
      • 未知(缺失)属性值的处理
      • 有代价的属性
    • 基本想法来源于人类做决策的过程
    • 简单、容易理解:"如果...就..."
    • 对噪声数据有鲁棒性
  • 应用

    • 在研究和应用中广泛使用
      • 医疗诊断(临床症状 → \rightarrow → 疾病)
      • 信用分析 (个人信息 → \rightarrow → 有价值客户?)
      • 日程规划
      • ......
    • 通常在部署更复杂的算法之前,常把决策树作为一个基准方法
      (baseline)
    • 决策树方法常被用作复杂学习框架中的基础部分之一

归纳学习假设

  • 大部分的学习是从已知的样本 中获得一般化的概念
  • 归纳学习算法能够在最大程度上保证 输出的假设能够在训练数据上拟合 目标概念
    • 注意: 过拟合问题
  • 归纳学习假设:
    Any hypothesis found to approximate the target function well over a sufficiently large set of training examples will also approximate the target function well over unobserved examples .
    (任一假设若在足够大 的训练样例集中很好地逼近 目标函数,它也能在未见实例中很好地逼近目标函数)
相关推荐
xiaoyaolangwj6 分钟前
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
学习·机器人·自动驾驶
静止了所有花开1 小时前
SpringMVC学习笔记(二)
笔记·学习
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
L_cl3 小时前
Python学习从0到1 day26 第三阶段 Spark ④ 数据输出
学习
Mephisto.java3 小时前
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
大数据·学习·hbase
红中马喽4 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习
尘浮生6 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
Young_202202026 小时前
学习笔记——KMP
笔记·学习
ChoSeitaku6 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
Fuxiao___6 小时前
不使用递归的决策树生成算法
算法