机器学习-决策树理论

决策树理论

本文先从说起,再到互信息,到信息增益。借助信息增益来确定决策树某节点的最优特征选择。使用递归的思想将决策树构建出来。
当树构建完成后,在使用此树做预测时,依然使用递归的思路。

所需基础

  • 数据结构-树
  • 递归算法

决策树理论中始终离不开熵的身影。

entropy-img

图1 熵

图1中展示了各种熵H,由此韦恩图可知:

I(X;Y) = H(X) - H(X|Y) // 其中I(X;Y) 被称为互信息

上式在决策树中会被用到,请先记住。


决策树 Decision Tree

顾名思义,决策树是用于决策。举个例子先

entropy-img

图2 是否去相亲

现实中在相亲之前,女生可根据一个个的feature(年龄、长相、收入、公务员)来对男生做判断,依据男生的各种条件来一层层决定是否和他相亲。

这种思维用决策树表示出来,即是图2。在每个节点上都有一个feature,以此feature的数值来产生分支。而在新的分支上,又可有新的节点再做分支,直到叶子节点即决定是否见面。

当前问题

为什么最开始先以“年龄”为判断标准,然后是长相、收入、公务员?

解答

由于目前没有足够数据的支撑,此处解释为:当使用树中的这种判断顺序时,可最快的做出决策 或者说 最有效的对目标人选进行选择。

注意:知晓feature的优劣,是决策树的核心!


信息增益 Information Gain

我们使用信息增益来判断feature的优劣,以方便对feature做出选择。因为构建决策树时,必须知道每个节点处的feature是什么。

信息增益:表示得知feature A的信息,而使得类别X的信息的不确定性减少的程度。

结合相亲的案例对比的解释一下,见下表

相亲案例算法中特点
所有的相亲待选男生原始的dataset最混乱
使用某个属性比如年龄对待选者划分,分成了不大于30岁和大于30岁两个子群体使用某个feature对dataset进行划分成多个subDataset每个子群体的混乱程度较低

信息增益就是:使用这个feature将dataset划分成subDataset,划分前与后的熵之差。

用公式写出来就是:

g(D,A) = H(D) - H(D|A)

g(D,A):对于数据集Dataset使用特征A之后的信息增益
H(D): 是Dataset的熵(称为经验熵)
H(D|A):Dataset在给定A情况下的条件熵(经验条件熵)

对比最开始提到的互信息和这里的信息增益,可看出来是一回事。
因此为了方便记忆和理解,可以把g(D,A)的公式和韦恩图图1结合起来。
类比如下:

互信息信息增益
I(X;Y) = H(X) - H(X|Y)g(D,A) = H(D) - H(D|A)

计算经验熵H(D)

H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|}log\frac{|C_k|}{|D|} H(D)=k=1KDCklogDCk
上式中:

  • ∣ C k ∣ |C_k| Ck是第k个类别对应的采样数据集的数目
  • ∣ C k ∣ / ∣ D ∣ |C_k|/|D| Ck/D指第k个label的个数占总数比值

举例,数据集如下面的“贷款表”

ID年龄是否有工作是否有自己的房子信贷情况是否给贷款(label)
1青年一般
2青年
3青年
4青年一般
5青年一般
6中年一般
7中年
8中年
9中年很好
10中年很好
11老年很好
12老年
13老年
14老年很好
15老年一般

上表中,有两种label即 C 1 C_1 C1是和 C 2 C_2 C2否。其中,有9个是,6个否。则

∣ C 1 ∣ ∣ D ∣ = 9 / 15 \frac{|C_1|}{|D|}=9/15 DC1=9/15 ∣ C 2 ∣ ∣ D ∣ = 6 / 15 \frac{|C_2|}{|D|}=6/15 DC2=6/15

因此 H ( D ) = − 9 15 ∗ l o g ( 9 15 ) − 6 15 ∗ l o g ( 6 15 ) H(D) = -\frac{9}{15}*log(\frac{9}{15}) - \frac{6}{15}*log(\frac{6}{15}) H(D)=159log(159)156log(156)

计算经验条件熵H(D|A)

H ( D ∣ A ) = = ∑ i = 1 n p i ∑ k = 1 K H ( D k ∣ A i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ l o g ∣ D i k ∣ ∣ D i ∣ H(D|A)=\\[2ex] =\sum_{i=1}^np_i\sum_{k=1}^KH(D_k|A_i)\\[2ex] = -\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}log\frac{|D_{ik}|}{|D_i|} H(DA)==i=1npik=1KH(DkAi)=i=1nDDik=1KDiDiklogDiDik

其中:

  • ∣ D i ∣ |D_i| Di,当某个feature有多种取值 a 1 , a 2 , . . . , a i , . . . , a n a_1, a_2, ..., a_i, ..., a_n a1,a2,...,ai,...,an时,则 ∣ D i ∣ |D_i| Di是这个feature的第i个取值的对应dataset数目
  • ∣ D i k ∣ |D_{ik}| Dik,在 D i D_i Di里 第 k k k个label的样本数量。

依然拿贷款表举例:

  • 在贷款表中第1个feature是年龄,有3种取值是青年中年和老年,分别各有5个。则 ∣ D 1 ∣ |D_1| D1=5, ∣ D 2 ∣ |D_2| D2=5, ∣ D 3 ∣ |D_3| D3=5
  • 对于年龄是青年的群体,即对于 D 1 D_1 D1而言,数据有2种label “是”和“否”,“是”有2个(表中ID为3,4),“否”有3个(表中ID为1,2,5)。则 ∣ D 11 ∣ = 2 |D_{11}|=2 D11=2, ∣ D 12 ∣ = 3 |D_{12}|=3 D12=3
  • 以此类推, ∣ D 21 ∣ = 3 , ∣ D 22 ∣ = 2 |D_{21}|=3, |D_{22}|=2 D21=3,D22=2, ∣ D 31 ∣ = 4 , ∣ D 32 ∣ = 1 |D_{31}|=4, |D_{32}|=1 D31=4,D32=1
  • 最终对于特征A是‘’年龄“”时,
    H ( D ∣ A 1 ) = − ∣ D 11 ∣ ∣ D 1 ∣ ∗ l o g ∣ D 11 ∣ ∣ D 1 ∣ − ∣ D 12 ∣ ∣ D 1 ∣ ∗ l o g ∣ D 12 ∣ ∣ D 1 ∣ = − 2 5 ∗ l o g 2 5 − 3 5 ∗ l o g 3 5 = 0.97095 H(D|A_1) =-\frac{|D_{11}|}{|D_1|}*log\frac{|D_{11}|}{|D_1|} - \frac{|D_{12}|}{|D_1|}*log\frac{|D_{12}|}{|D_1|} \\[2ex] =-\frac{2}{5}*log\frac{2}{5} - \frac{3}{5}*log\frac{3}{5}=0.97095 H(DA1)=D1D11logD1D11D1D12logD1D12=52log5253log53=0.97095

H ( D ∣ A 2 ) = − ∣ D 21 ∣ ∣ D 2 ∣ ∗ l o g ∣ D 21 ∣ ∣ D 2 ∣ − ∣ D 22 ∣ ∣ D 2 ∣ ∗ l o g ∣ D 22 ∣ ∣ D 2 ∣ = − 3 5 ∗ l o g 3 5 − 2 5 ∗ l o g 2 5 = 0.97095 H(D|A_2) =-\frac{|D_{21}|}{|D_2|}*log\frac{|D_{21}|}{|D_2|} - \frac{|D_{22}|}{|D_2|}*log\frac{|D_{22}|}{|D_2|}\\[2ex] =-\frac{3}{5}*log\frac{3}{5} -\frac{2}{5}*log\frac{2}{5}=0.97095 H(DA2)=D2D21logD2D21D2D22logD2D22=53log5352log52=0.97095

H ( D ∣ A 3 ) = − ∣ D 31 ∣ ∣ D 3 ∣ ∗ l o g ∣ D 31 ∣ ∣ D 3 ∣ − ∣ D 32 ∣ ∣ D 3 ∣ ∗ l o g ∣ D 32 ∣ ∣ D 3 ∣ = − 4 5 ∗ l o g 4 5 − 1 5 ∗ l o g 1 5 = 0.72193 H(D|A_3) =-\frac{|D_{31}|}{|D_3|}*log\frac{|D_{31}|}{|D_3|} - \frac{|D_{32}|}{|D_3|}*log\frac{|D_{32}|}{|D_3|}\\[2ex] =-\frac{4}{5}*log\frac{4}{5} -\frac{1}{5}*log\frac{1}{5}=0.72193 H(DA3)=D3D31logD3D31D3D32logD3D32=54log5451log51=0.72193
最终:
H ( D ∣ A = 年 龄 ) = p 1 ∗ H ( D ∣ A 1 ) + p 2 ∗ H ( D ∣ A 2 ) + p 3 ∗ H ( D ∣ A 3 ) = ∣ D 1 ∣ ∣ D ∣ ∗ H ( D ∣ A 1 ) + ∣ D 2 ∣ ∣ D ∣ ∗ H ( D ∣ A 2 ) + ∣ D 3 ∣ ∣ D ∣ ∗ H ( D ∣ A 3 ) = 5 / 15 ∗ 0.97095 + 5 / 15 ∗ 0.97095 + 5 / 15 ∗ 0.72193 = 0.88794 H(D|A=年龄)=p_1*H(D|A_1)+p_2*H(D|A_2)+p_3*H(D|A_3)\\[2ex] =\frac{|D_1|}{|D|}*H(D|A_1)+\frac{|D_2|}{|D|}*H(D|A_2)+\frac{|D_3|}{|D|}*H(D|A_3)\\[2ex]=5/15*0.97095+5/15*0.97095+5/15*0.72193\\[2ex] =0.88794 H(DA=)=p1H(DA1)+p2H(DA2)+p3H(DA3)=DD1H(DA1)+DD2H(DA2)+DD3H(DA3)=5/150.97095+5/150.97095+5/150.72193=0.88794

和经验熵相比,经验条件熵更复杂难懂些。笔者在这里对经验条件熵做一个简单的解释:
依据某个feature比如年龄的不同取值,将原始dataset分成多个subDataset即青年、中年、老年数据集, 则
H(D|A是年龄) =
青年数据集占比 * H(青年数据集)
+中年数据集占比 * H(中年数据集)
+老年数据集占比 * H(老年数据集)

构建树

第一步
根据上面的方法,可以计算出所有feature的H(D|A)。
使用公式 gain=H(D)-H(D|A) 可求得 不同feature对应的gain。
最大gain的那个feature即是当前的最优feature,作为当前步的构建树的节点。
假设最优的是第一步使用的是“年龄”特征。

第二步
有了第一个节点,依据年龄将dataset分成三个子集即青年数据集、中年数据集和老年数据集。
对各个子集分别再使用第一步中的方法(此处是递归思想),注意第一步用到的feature不考虑了。

接下来,就是使用递归继续构建树。

使用递归算法,终止条件为:

  • 划分出的子集的熵为0,即子集都是同一个label
  • 所有的feature都已经用完

三种构建决策树的方法

在上面的构建树的过程中,我们使用的是gain来确定最佳feature。这种方法是ID3。

其它的思路还有:

  • C4.5
  • CART

对新思路有兴趣的伙伴可自行学习。
有了ID3的基础,对C4.5和CART也不在话下。

决策树的使用

决策树使用的过程,就是不断决策然后在分支里再决策。

先使用决策树的根节点的feature,对该样本进行划分到不同分支,
在分支上再使用此对应的feature对样本继续分支,如此递归下去,当到达叶子节点时即输出。

可参照 图2 是否去相亲 去理解。


参考

https://blog.csdn.net/c406495762/article/details/75663451

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值