决策树概览

决策树

问题框架

将具有p维离散特征的n个样本分到c个类别中去。
模型的测试:一棵树,对于输入按照树的指向来提问题,最终归入一个叶子节点实现分类。
模型的训练:每次对数据集的属性提出一个问题,把一个叶子节点变成分叉(而不是增加一个属性的分支),从而逐渐按照属性值形成分支。

数据集:西瓜数据集2.01

编号色泽根蒂敲声纹理脐部触感好瓜
1青绿蜷缩浊响清晰凹陷硬滑
2乌黑蜷缩沉闷清晰凹陷硬滑
3乌黑蜷缩浊响清晰凹陷硬滑
4青绿蜷缩沉闷清晰凹陷硬滑
5浅白蜷缩浊响清晰凹陷硬滑
6青绿稍蜷浊响清晰稍凹软粘
7乌黑稍蜷浊响稍糊稍凹软粘
8乌黑稍蜷浊响清晰稍凹硬滑
9乌黑稍蜷沉闷稍糊稍凹硬滑
10青绿硬挺清脆清晰平坦软粘
11浅白硬挺清脆模糊平坦硬滑
12浅白蜷缩浊响模糊平坦软粘
13青绿稍蜷浊响稍糊凹陷硬滑
14浅白稍蜷沉闷稍糊凹陷硬滑
15乌黑稍蜷浊响清晰稍凹软粘
16浅白蜷缩浊响模糊平坦硬滑
17青绿蜷缩沉闷稍糊稍凹硬滑

解决方法框架

通用的解决方法是,对于p种属性和当前的叶子节点(对应的子数据集),首先计算每种属性的划分在这个子数据集上带来的区分度,再选择区分度最大的一个属性进行区分。
从决策树的根节点开始,每一次划分是把决策树中的叶子节点划分成分支节点的一个过程。决策树中的叶子节点相当于归属同一属性的数据子集,而对叶子节点的拆分相当于选择区分度最大的属性划分数据子集,拆分后的分支节点相当于在此处对某个属性进行了测试,从而进一步划分数据子集。

叶子节点划分:每次只做一个节点的分裂,分裂选项是每一种可能分裂的属性(包括连续属性中的不同划分方法)。
区分度最大:对于每一种可能的分裂方式,计算一个指标,按照最大的指标值指示的属性来分类。

下面列举的几种方法也主要是区分度的计算方式不同。

  • 上述方法其实蕴含了一种思想:小的决策树总比大的好
  • 至于按照DFS还是BFS来扩展,其实无所谓,因为最后得到的结果一定是一样的(不考虑剪枝)。

实例分析

以下以信息增益准则举例,在上面的数据集上构建一棵决策树。

基于信息熵和信息增益:在每次数据集的划分上,选择产生信息增益最大的节点。

信息熵:衡量样本集合的纯度的指标。
E n ( D ) = − ∑ k = 1 c p k l o g 2 p k En(D) = -\sum_{k=1}^cp_klog_2{p_k} En(D)=k=1cpklog2pk

  • 信息熵也描述了随机变量信息量。信息熵越大,对应的随机变量的随机性越强。
  • 信息熵最小值为0,对应所有样本属于同一类/随机变量概率分布只有1个P=1;最大值为 l o g 2 c log_2{c} log2c,对应每种分类标签样本数相同/随机变量每个情况等可能。

举个例子(参考西瓜2.0数据集)
根节点的信息熵:因为一共17个样本,8个是9个否,所以 E n ( D ) = − 8 17 l o g 8 17 − 9 17 l o g 9 17 = 0.998 En(D) = -\frac{8}{17}log\frac{8}{17}-\frac{9}{17}log\frac{9}{17} = 0.998 En(D)=178log178179log179=0.998

信息增益:在将样本集合分类之后减少的信息量。从随机变量的角度看,就是把随机变量按类型分开之后,平均减少的随机性。

G a i n ( D , a ) = E n ( D ) − ∑ v = 1 V D v D E n ( D v ) Gain(D, a) = En(D) - \sum_{v=1}^V\frac{D_v}{D}En(D_v) Gain(D,a)=En(D)v=1VDDvEn(Dv)

  • 因为如果把样本数据集按分类标签分开,信息熵将会降为0,信息增益最大,所以信息增益也可以描摹特定划分属性和分类标签的相似度。

举个例子(参考西瓜2.0数据集)
按照色泽划分数据集后的信息熵
青绿的信息熵:一共6个样本,3个是3个否,所以 E n ( D 1 ) = − 3 6 l o g 3 6 − 3 6 l o g 3 6 = 1.000 En(D_1) = -\frac{3}{6}log\frac{3}{6}-\frac{3}{6}log\frac{3}{6} = 1.000 En(D1)=63log6363log63=1.000
乌黑的信息熵:一共6个样本,2个是4个否,所以 E n ( D 2 ) = − 4 6 l o g 4 6 − 2 6 l o g 2 6 = 0.918 En(D_2) = -\frac{4}{6}log\frac{4}{6}-\frac{2}{6}log\frac{2}{6} = 0.918 En(D2)=64log6462log62=0.918
浅白的信息熵:一共5个样本,1个是4个否,所以 E n ( D 3 ) = − 1 5 l o g 1 5 − 4 5 l o g 4 5 = 0.722 En(D_3) = -\frac{1}{5}log\frac{1}{5}-\frac{4}{5}log\frac{4}{5} = 0.722 En(D3)=51log5154log54=0.722
在按照色泽划分之后的平均信息熵: 6 17 ∗ 1.000 + 6 17 ∗ 0.918 + 5 17 ∗ 0.722 = 0.889 \frac{6}{17}*1.000 + \frac{6}{17}*0.918 + \frac{5}{17}*0.722 = 0.889 1761.000+1760.918+1750.722=0.889,信息增益 G a i n ( D , 色 泽 ) = 0.109 Gain(D, 色泽) = 0.109 Gain(D,)=0.109

信息增益准则:在每次数据集的划分上,对于可以使用的各个属性计算信息增益,选择产生信息增益属性,对当前叶子节点进行划分。

举个例子(参考西瓜2.0数据集)
第一次划分之后,根据六个标签分别计算信息增益,选择信息增益最大的属性进行分支,然后各个叶子节点之间就没有联系了,他们内部再分别进行分支。

区分度的度量

除了信息增益之外,区分度还有很多种度量。

信息增益

划分后获得最大的信息增益(最小的平均信息熵)
上面描述得非常清楚了。在这里再放一下公式。
E n ( D ) = − ∑ k = 1 c p k l o g 2 p k En(D) = -\sum_{k=1}^cp_klog_2{p_k} En(D)=k=1cpklog2pk
G a i n ( D , a ) = E n ( D ) − ∑ v = 1 V D v D E n ( D v ) Gain(D, a) = En(D) - \sum_{v=1}^V\frac{D_v}{D}En(D_v) Gain(D,a)=En(D)v=1VDDvEn(Dv)

信息增益:分之前的信息熵和分之后的信息熵(加权平均)之差。

增益率

划分后获得最大的增益率
信息增益会偏向类型数比较多的情况,也会倾向于不平衡分裂(数据子集之间size差距很大)

G a i n _ R a d i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_Radio(D, a) = \frac{Gain(D, a)}{IV(a)} Gain_Radio(D,a)=IV(a)Gain(D,a)
I V ( a ) = − ∑ v = 1 V D v D l o g 2 D v D IV(a) = - \sum_{v=1}^V\frac{D_v}{D}log_2\frac{D_v}{D} IV(a)=v=1VDDvlog2DDv

信息率:针对属性计算属性的信息熵(IV),并用这个值修正信息增益。

Gini Index

划分后获得最小的平均Gini
Gini index偏向于类型数比较少的情况,倾向于平衡分裂,而且是这三个之中计算时间最大的。

G i n i ( D ) = ∑ k = 1 c ∑ k ′ ≠ k p k p k ′ Gini(D) = \sum_{k=1}^c\sum_{k'\neq k}p_kp_{k'} Gini(D)=k=1ck=kpkpk

Gini是数据子集纯度的表征,Gini越小,数据集纯度越高。

G i n i _ i n d e x ( D , a ) = ∑ v = 1 V D v D G i n i ( D v ) Gini\_index(D, a) = \sum_{v=1}^{V}\frac{D_v}{D}Gini(D_v) Gini_index(D,a)=v=1VDDvGini(Dv)

Gini index是数据集划分后平均纯度的表征,越小越好。

其他相关问题

剪枝

提前剪枝:建树建到一半就完。典型标志:

  • 已经没有可分属性(节点中所有样本的特征值一致)
  • 已经全部归为一类(节点中所有样本的标签值一致)
  • 信息增益已经不再增加
  • 数据集样本数已经小于阈值,或决策树高度已经超过高度阈值

后剪枝:完全建好之后,自底向上进行节点合并。

  • 合并之后的节点是给True还是False?按照训练数据集投票,哪个多取用哪个。
  • 合并停止的标志:仍然可以参考剪枝结束的方式。
    • 合并之后泛化误差值不再减小。(泛化误差/loss怎么衡量?见下。)
    • 数据集样本数已经符合样本数阈值,决策树高度已经符合高度阈值。

一种loss的定义方式
来自2
l o s s = C ( T ) + α T loss = C(T)+\alpha T loss=C(T)+αT
loss分为两部分,前半部分 C ( T ) C(T) C(T)表示决策树的复杂度。
C ( T ) = ∑ t = 1 T N t E n t C(T)=\sum_{t=1}^{T}N_tEn_t C(T)=t=1TNtEnt
N t N_t Nt表示叶子节点t上的样本数, E n t En_t Ent表示叶子节点t上通过样本标签值计算的信息熵, T T T表示叶子节点数。
后半部分 α T \alpha T αT α > 0 \alpha>0 α>0为参数,这一项用来控制树的大小对loss造成的影响。

连续值处理

对于某个连续属性,划分成使信息增益最大的两部分。信息增益的计算和上面一样。
其实相当于不同的阈值划分导致样本二分上的差异,我们要在这么多二分方案中选择信息增益最大的那个方案,使属性离散化。离散化之后再去和别人比。

缺失值处理

为样本的每个可能值赋予一个概率,细节见西瓜书1的4.4.2.

经典算法概述

ID3

最基本的方法,用信息增益选择属性+不剪枝

ID3算法只有树的生成,而没有树的剪枝。这会导致决策树的过拟合。2

C4.5

用信息增益率选择属性,树构造完成后剪枝,有连续值和缺失值处理。
(如果只是换一下选择属性准则,那真的可谓换汤不换药了。)

CART

用Gini index选择属性,而且每次只进行二分。3

没错,因为只能二分,所以需要测试的种类数很多。

  • 离散属性的二分:某些取值归左,其他取值归右,在 2 v − 2 2 \frac{2^v-2}{2} 22v2种划分方案中取优
    • 2^v表示全部划分情况,-2表示全左或者全右的情况,/2表示左右划分的对称。
  • 连续属性的二分:按照阈值二分,在 n − 1 n-1 n1种划分方案中取优。

参考


  1. 周志华 机器学习 西瓜书 ↩︎ ↩︎

  2. 李航 统计学习方法 第2版 ↩︎ ↩︎

  3. 按照西安交大刘均老师的《数据挖掘》课组织逻辑 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值