决策树学习
- 决策树
-
- 决策树基础
-
- 适用决策树学习的经典目标问题
- 样本的表示
- 训练样本
- 决策树的概念
- 发展历史
- 经典决策树算法
-
- ID3算法
-
- 属性选择和节点混杂度(Impurity)
-
- ID3 Q1: 哪个属性是最佳属性?
- 当前最佳属性节点选择
- 熵(Entropy)(广泛使用)
- 熵
- 混杂度(熵)
- 混杂度(Gini)
- 混杂度 (错分类)
- 度量混杂度的变化 Δ I ( N ) ΔI(N) ΔI(N) — 信息增益(IG,Information Gain)
- ID3 Q2: 何时返回(停止分裂节点)?
- ID3举例
- ID3算法搜索的假设空间
-
- ID3中的归纳偏置 (Inductive Bias)
- CART (分类和回归树)
- 过拟合问题(over-fitting)
- 如何避免过拟合
-
-
- 类型 I.
-
- 何时停止分裂(1) :基于样本数
- 何时停止分裂(2):基于信息增益的阈值
- 避免过拟合: 类型 II
-
- 后剪枝 (1): 错误降低剪枝
-
- 剪枝后新的叶节点的标签赋值策略
- 错误降低剪枝的效果
- 后剪枝 (2): 规则后剪枝
-
- 扩展: 现实场景中的决策树学习•问题 & 改进
-
- 1. 连续属性值
- 2. 具有过多取值的属性
- 3. 未知属性值
- 4. 有代价的属性
- 其他信息
- 小结
- 归纳学习假设
决策树
决策树基础
适用决策树学习的经典目标问题
- 带有非数值特征的分类问题(主要是非连续)
- 离散特征
- 没有相似度概念(没有明确相似度概念)
- 特征无序
另一个例子: 水果
- 颜色:红色、绿色、黄色……
- 大小:小、中、大
- 形状:球形、细长
- 味道:甜、酸
样本的表示
- 属性的列表而非数值向量
- 例如享受运动的例子:
- 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个负例,A1为最佳属性时,取True的有21个正例5个负例,A1取False的有8个正例30个负例;A2为最佳属性时,取True的有18个正例33个负例,A2取False的有11个正例2个负例
比如A1是湿度,湿度大还是正常,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(wj)可能是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(Wi) = 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,随机一个属性就可以构建决策树,
因此在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算法搜索的假设空间
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): 规则后剪枝
- 把树转换成等价的由规则构成的集合
- e.g.
if (outlook=sunny) and (humidity=high) then playTennis = no
- 对每条规则进行剪枝,去除哪些能够提升该规则准确率的规则前件
- i.e.
(outlook=sunny), (humidity=high)
- 将规则排序成一个序列 (根据规则的准确率从高往低排序)
- 用该序列中的最终规则对样本进行分类(依次查看是否满足规则序列)
(注:在规则被剪枝后,它可能不再能恢复成一棵树)
一种被广泛使用的方法,例如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
其他信息
- 可能是最简单和频繁使用的算法
- 决策森林:
- 更新的算法:C5.0 http://www.rulequest.com/see5-info.html
- Ross Quinlan的主页: http://www.rulequest.com/Personal/
小结
归纳学习假设
- 大部分的学习是从已知的样本中获得一般化的概念
- 归纳学习算法能够在最大程度上保证输出的假设能够在训练数据上拟合目标概念
- 归纳学习假设:
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.
(任一假设若在足够大的训练样例集中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数)