【机器学习】3.决策树

基本流程

输入:训练集 D = {(x1,y1),(x2,y2),…,(xm ,ym)}
   属性集A={a1,a2 ,…,ad}
过程:函数TreeGenerate(D,A)
   1. 生成结点 node;
   2. if D中的样本全属于同一个类别C,then:
   3.   将node作为C类叶节点,return
   4. end if
   5. if A != [] or D中的样本在A上的取值相同,then:
   6.   将node作为也叶结点,其类别为D中样本最多的类,return;
   7. end if
   8. 从A中选择最有划分属性a*
   9. for a* 的每一个值 a*v, do
   10.   为node生成一个分支,令Dv 表示D在 a* 上取值为a*v的样本子例
   11.   if DV为空,then
   12.      将分支结点作为叶结点,其类别为D中样本最多的类别,return
   13.   else:
   14.      以TreeGenerate(Dv ,A{a* })为分支结点
   15.   end if
   16. end for

从基本流程中可以看出,决策树算法的关键在第8行,如何选择最优划分属性。

划分选择

信息增益

信息增益是度量样本集合纯度最常用的一种指标,假设当前样本D中第k类样本所占的比例为PK ,则D的信息熵定义为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ P k l o g 2 P k Ent(D)= -\sum_{k=1}^{|y|} P_klog_2P_k Ent(D)=k=1yPklog2Pk
它的曲线如下:
                  在这里插入图片描述
可以看出在概率p=0.5是信息增益最大,为1。我们可以把信息熵理解为“不确定性”,当概率为0.5时,比如抛硬币,出现正反两面的概率都是0.5,所以这个事件的不确定性是最大的;当一个事件发生的概率为0或1的时候,那这个事件就是必然事件了,不确定性为0,所以信息熵最低,为0

假设离散属性a有V个可能的取值{a1 ,a1 ,…,av },若使用a对样本D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为av 的样本,记为Dv ,给分支结点赋予权重 ∣ D v ∣ ∣ D ∣ \mathop \frac{|D^v|}{|D|} DDv ,则信息增益为:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V} \frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
可以看出信息增益越大,使用属性a来进行划分的纯度提高越大

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

在上表中,根结点包含D中所有样例,正例P1 =8/17 ,反例P2 =9/17
E n t ( D ) = − ∑ k = 1 2 P k l o g 2 P k = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) Ent(D) = -\sum _{k=1}^2 P_klog_2P_k = -(\frac {8}{17}log_2\frac{8}{17} + \frac{9}{17}log_2\frac{9}{17}) Ent(D)=k=12Pklog2Pk=(178log2178+179log2179)
计算当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每一个属性的信息增益,以色泽为例,它有三个取值:{青绿,乌黑,浅白},若以色泽进行划分,可得到三个子集。
   D1(青绿)={1,4,6,10,13,17} 其中正例p1 = 3/6 反例 p2 = 3/6
   D1(乌黑)={2,3,7,8,9,15} 其中正例p1 = 4/6 反例 p2 = 2/6
   D1(浅白)={5,11,12,14,16} 其中正例p1 = 1/5 反例 p2 = 4/5

E n t ( D 1 ) = − ∑ k = 1 2 P k l o g 2 P k = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1 Ent(D^1) = -\sum _{k=1}^2 P_klog_2P_k = -(\frac {3}{6}log_2\frac{3}{6} + \frac{3}{6}log_2\frac{3}{6}) = 1 Ent(D1)=k=12Pklog2Pk=(63log263+63log263)=1
E n t ( D 2 ) = − ∑ k = 1 2 P k l o g 2 P k = − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 Ent(D^2) = -\sum _{k=1}^2 P_klog_2P_k = -(\frac {4}{6}log_2\frac{4}{6} + \frac{2}{6}log_2\frac{2}{6}) = 0.918 Ent(D2)=k=12Pklog2Pk=(64log264+62log262)=0.918
E n t ( D 3 ) = − ∑ k = 1 2 P k l o g 2 P k = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 Ent(D^3) = -\sum _{k=1}^2 P_klog_2P_k = -(\frac {1}{5}log_2\frac{1}{5} + \frac{4}{5}log_2\frac{4}{5}) = 0.722 Ent(D3)=k=12Pklog2Pk=(51log251+54log254)=0.722
由此可得:
G a i n ( D , 色 泽 ) = E n t ( D ) − ∑ v = 1 3 ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 0.109 Gain(D,色泽) = Ent(D) - \sum_{v=1}^3 \frac{|D^v|}{|D|}Ent(D^v)= 0.109 Gain(D,)=Ent(D)v=13DDvEnt(Dv)=0.109

同理:
G a i n ( D , 根 蒂 ) = 0.143  ,    G a i n ( D , 敲 声 ) = 0.141 Gain(D,根蒂) = 0.143 \text{ }\text{, }\text{ }\text{ } Gain(D,敲声) = 0.141 Gain(D,)=0.143   Gain(D,)=0.141
G a i n ( D , 纹 理 ) = 0.381  ,    G a i n ( D , 脐 部 ) = 0.289 Gain(D,纹理) = 0.381 \text{ }\text{, }\text{ }\text{ } Gain(D,脐部) = 0.289 Gain(D,)=0.381   Gain(D,)=0.289
G a i n ( D , 触 感 ) = 0.006 Gain(D,触感) = 0.006 Gain(D,)=0.006

显然,属性纹理的信息增益最大,所以它被选为划分属性

清晰
稍糊
模糊
纹理=
1-2-3-4-5-6-8-10-15
7-9-13-14-17
11-12-16

然后决策树算法对每一个分支结点做进一步划分,以纹理=清晰为例,D1 ={1,2,3,4,5,6,8,10,15},基于D1 计算出各属性的信息增益
G a i n ( D 1 , 色 泽 ) = 0.043  ,    G a i n ( D 1 , 根 蒂 ) = 0.458 Gain(D^1,色泽) = 0.043\text{ }\text{, }\text{ }\text{ } Gain(D^1,根蒂) = 0.458 Gain(D1,)=0.043   Gain(D1,)=0.458
G a i n ( D 1 , 敲 声 ) = 0.331  ,    G a i n ( D 1 , 脐 部 ) = 0.458 Gain(D^1,敲声) = 0.331\text{ }\text{, }\text{ }\text{ } Gain(D^1,脐部) = 0.458 Gain(D1,)=0.331   Gain(D1,)=0.458
G a i n ( D 1 , 触 感 ) = 0.458 Gain(D^1,触感) = 0.458 Gain(D1,)=0.458

不断重复上述步骤,可以得到决策树如下:

清晰
稍糊
模糊
蜷缩
稍蜷
硬挺
硬滑
硬滑
青绿
乌黑
浅白
硬滑
软粘
纹理=?
根蒂=?
触感=?
坏瓜
好瓜
色泽=?
坏瓜.
好瓜.
坏瓜..
好瓜..
触感=.?
好瓜...
好瓜....
坏瓜...

增益率

信息增益准则对取值数目较多的属性有所偏好,最极端的理解方式,如果将身份证号作为一个属性,那么,其实每个人的身份证号都是不相同的,也就是说,有多少个人,就有多少种取值,如果用身份证号这个属性去划分原数据集,那么,原数据集中有多少个样本,就会被划分为多少个子集,这样的话,会导致信息增益公式的第二项整体为0,虽然这种划分毫无意义,但是从信息增益准则来讲,这就是最好的划分属性。

为了消除这种影响,使用增益率来划分属性。
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(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|}log2\frac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv被称为属性a的固有值,v越大,IV(a)越大

基尼指数

数据D的纯度可用基尼值来衡量,
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k 1 ≠ k P k P k 1 = 1 − ∑ k = 1 ∣ y ∣ P k 2 Gini(D) = \sum_{k=1}^{|y|}\sum_{k^1 \neq k}P_kP_{k^1} = 1-\sum_{k=1}^{|y|}P_k^2 Gini(D)=k=1yk1=kPkPk1=1k=1yPk2
表示从D中随机抽取两个样本,他们不一致的概率

而对于属性a的基尼指数,值越小越好。
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) Giniindex(D,a)=v=1VDDvGini(Dv)

剪枝处理

剪枝处理是决策树对付过拟合的主要手段

在决策树学习中,结点的划分过程不断重复,形成的分支过多,产生过拟合。

预剪枝:在决策树生成过程中,在每个结点划分前,先进行评估,若划分不能带来决策树模型泛化能力上的提升,则停止划分,

  • 能有效的减少训练时间开销和测试时间开销
  • 可能会产生欠拟合

后剪枝:先生成完整的决策树,在自底向上检查,若该结点对应的子树替换成叶结点,能带来决策树泛化能力的提升,则替换之。

连续和缺值

连续值处理

给定样本集D和连续属性a,假定a在D上出现n个不同的取值,将这些值从小到大排序,记为{a1 ,a2, … ,an},基于划分点t可将D分为子集Dt- 和Dt+,Dt-包含那些在属性a上取值不大于t的样本,对于相邻属性取值ai和ai+1, t在区间 [ai,ai+1)上的任何取值划分结果相同,因此,我们选择中位点。
T a = a i + a i + 1 2 ∣ 1 < = i < = n − 1 T_a = {\frac{a^i+a^{i+1}}{2}| 1<=i<=n-1} Ta=2ai+ai+11<=i<=n1
so 我们拥有了n-1个可划分取值点。
计算
G a i n ( D , a , t ) = m a x t ∈ T a E n t ( D ) − ∑ λ ∈ ( − 1 , + 1 ) ∣ D T λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,a,t) = max_{t\in T_a}Ent(D)-\sum_{\lambda\in (-1,+1)} \frac{|D_{T^\lambda}|}{|D|}Ent(D_{t^\lambda}) Gain(D,a,t)=maxtTaEnt(D)λ(1,+1)DDTλEnt(Dtλ)
选择最大取值

缺省值

对于缺省值,我们需要考虑两个问题

  • 如何在属性缺失的情况下进行属性选择划分
  • 对于划分属性,若样本在该属性上的值缺失,如何对样本进行划分

给定训练集D和属性a,令Dn表示D中在属性a上没有缺省值的样本子集。

对于问题一,假设属性a有v个取值{ a1 , a2, … ,av}, 令Dnv表示Dn中属性a上取值为av的样本子集,Dnk表示Dn中属于第k类{k=1,2,…|y|}的样本子集
定义:
p = ∑ x ∈ D n w x ∑ x ∈ D w x 表 示 a 中 五 缺 失 值 样 本 所 占 的 比 例 p = \frac{\sum_{x\in D_n}w_x}{\sum_{x\in D}w_x} \text 表示a中五缺失值样本所占的比例 p=xDwxxDnwxa
p k = ∑ x ∈ D n k w x ∑ x ∈ D n w x ( 1 < = k < = ∣ y ∣ ) 表 示 无 缺 失 样 本 中 第 k 类 所 占 的 比 例 p_k =\frac{\sum _{x \in D_nk} w_x}{\sum _{x \in D_n} w_x}(1<=k<=|y|) \text表示无缺失样本中第k类所占的比例 pk=xDnwxxDnkwx(1<=k<=y)k
r v = ∑ x ∈ D k v w x ∑ x ∈ D n w x ( 1 < = v < = V ) 表 示 无 缺 失 样 本 中 a v 所 占 的 比 例 r_v=\frac{\sum _{x \in D_k^v} w_x}{\sum _{x \in D_n} w_x}(1<=v<=V)\text表示无缺失样本中a^v 所占的比例 rv=xDnwxxDkvwx(1<=v<=V)av

信息增益可以推广为:
G a i n ( D , a ) = p ∗ G a i n ( D n , a ) Gain(D,a) = p* Gain(D_n,a) Gain(D,a)=pGain(Dn,a)

对于问题2,若样本x在划分属性a上的取值已知,则将x划分到其取值对应的子节点,且样本权值在子节点保持为wx,若样本x在划分属性a上取值未知,则将x同时划分到所有子节点,且样本权值在于属性a对用的子结点中调整为rv*wx

多变量决策树

非叶子结点不再是仅针对某个属性,而是对属性的线性组合进行测试,换言之,每个叶子结点是一个形如   ∑ i = 1 d w i a i = t \ \sum_{i=1}^d w_ia_i=t  i=1dwiai=t的线性分类器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值