决策树学习笔记——决策树建树原理之ID3建树原理(一)

决策树建树原理之ID3建树原理(一)

信息熵

在ID3算法之中,建树的时候,是根据信息增益挑选最具有解释能力的变量,在了解信息增益之前需要先了解信息熵和条件熵。
对于一个变量 A A A,变量 A A A中有 n 1 n_1 n1个水平个数,则信息熵的数学表达式如下:
E n t r o p y ( A ) = − ∑ i = 1 n 1 p i l o g ( p i ) Entropy(A)=-\sum_{i=1}^{n_1}p_ilog(p_i) Entropy(A)=i=1n1pilog(pi)
其中, p i p_i pi是变量 A A A的每个水平对应的概率,例如 A A A有10个观测值,有3个水平,分别是 a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3,对应的个数分别是2个,3个,5个。则 p a 1 p_{a_1} pa1=2/10, p a 2 p_{a_2} pa2=3/10, p a 3 p_{a_3} pa3=5/10。信息熵越小,表示包含的信息越小,变量 A A A的水平越少,即 A A A的纯度越高。以上为信息熵的简单概念介绍。
对于 l o g log log的底数取值: l o g log log函数基的选择是任意的(信息论中基常常选择为2,因为计算机中每个bit为0/1。而机器学习中基常常选择为自然常数,因此单位常常被称为nats)。

条件熵

假设新加入一个变量 B B B,变量 B B B中有 n 2 n_2 n2个水平个数,则变量 A A A的水平被变量 B B B的各个水平所分割,则可以通过计算变量 B B B的各个水平下变量 A A A的信息熵加权,从而得到在加入变量 B B B后,变量 A A A的纯度。条件熵的数学表达式如下:
E n t r o p y B ( A ) = ∑ j = 1 n 2 ∣ A j A ∣ E n t r o p y ( A j ) Entropy_B(A)=\sum_{j=1}^{n_2}\left|\frac{A_j}{A}\right|Entropy(A_j) EntropyB(A)=j=1n2AAjEntropy(Aj)
其中, A j A_j Aj是变量 A A A被变量 B B B的水平所分割的观测数, A A A是变量的观测数量, E n t r o p y ( A j ) Entropy(A_j) Entropy(Aj)被称为变量 A A A在变量 B B B的水平分割下的信息熵。

信息增益

信息增益就是利用原来的信息熵减去条件熵,表示原有的变量 A A A加入变量 B B B之后,变量 A A A的纯度的变化。信息增益的数学表达式如下:
G a i n ( A , B ) = E n t r o p y ( A ) − E n t r o p y B ( A ) Gain\left(A,B\right)=Entropy(A)-Entropy_B(A) Gain(A,B)=Entropy(A)EntropyB(A)
G a i n ( A , B ) Gain\left(A,B\right) Gain(A,B)即为信息增益,当加入的变量 B B B对变量 A A A的影响越大时,信息增益的变化也就越大。

案例计算

为了能够牢记,深入理解信息熵、条件熵、信息增益的定义,选取最为经典的西瓜数据集,手动计算这几个指标。

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

在西瓜数据集中,目标变量是“好瓜”,首先计算“好瓜”的信息熵,目标变量“好瓜”的观测数量为17个,拥有两个水平个数,其中 P 是 = 8 17 P_是=\frac{8}{17} P=178 P 否 = 9 17 P_否=\frac{9}{17} P=179,这里的 l o g log log底数取2,计算过程如下:
E n t r o p y ( 好 瓜 ) = − ( P 是 l o g 2 P 是 + P 否 l o g 2 P 否 ) = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 Entropy(好瓜) =-\left(P_是log_2P_是+P_否log_2P_否\right)\\ =-\left(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17}\right) =0.998 Entropy()=(Plog2P+Plog2P)=(178log2178+179log2179)=0.998
假设加入了“色泽”这个自变量,接下来计算“好瓜”的条件熵,“色泽”有水平个数有三个,计算过程如下:
E n t r o p y B ( A ) = 6 17 × − ( 3 6 l o g 2 3 6 + ( 3 6 l o g 2 3 6 ) ) + 6 17 × − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) + 5 17 × − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.889 Entropy_B(A)=\frac{6}{17}\times-\left(\frac{3}{6}log_2\frac{3}{6}+\left(\frac{3}{6}log_2\frac{3}{6}\right)\right)\\+\frac{6}{17}\times-\left(\frac{4}{6}log_2\frac{4}{6}+\frac{2}{6}log_2\frac{2}{6}\right)\\+\frac{5}{17}\times-\left(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5}\right)\\=0.889 EntropyB(A)=176×(63log263+(63log263))+176×(64log264+62log262)+175×(51log251+54log254)=0.889
则对于变量“好瓜”而言,“色泽”的信息增益为:
G a i n ( 好 瓜 , 色 泽 ) = E n t r o p y ( 好 瓜 ) − E n t r o p y B ( A ) = 0.109 Gain(好瓜,色泽)=Entropy(好瓜)-Entropy_B(A)=0.109 Gain()=Entropy()EntropyB(A)=0.109
同样的,根据以上相应的式子,分别计算其他几个变量的信息增益,如下:
G a i n ( 好 瓜 , 根 蒂 ) = 0.143 G a i n ( 好 瓜 , 声 音 ) = 0.141 G a i n ( 好 瓜 , 纹 理 ) = 0.381 G a i n ( 好 瓜 , 脐 部 ) = 0.289 G a i n ( 好 瓜 , 触 感 ) = 0.006 Gain(好瓜,根蒂)=0.143\\ Gain(好瓜,声音)=0.141\\ Gain(好瓜,纹理)=0.381\\ Gain(好瓜,脐部)=0.289\\ Gain(好瓜,触感)=0.006\\ Gain()=0.143Gain()=0.141Gain()=0.381Gain()=0.289Gain()=0.006
可知,“纹理”对目标变量的信息增益是最大的,其次是脐部。即纹理是最重要的变量。

代码

再次,附上信息熵,条件熵,信息增益的Python求解代码,前面这两个代码,是我找了一些别的博客的代码参考,然后前后花了四个钟左右把存在的BUG给改过来了。不过我的代码还不是最好的,毕竟我不是纯IT,望谅解。

信息熵代码

#计算信息熵
def Entropy_y(y):
    y=list(y)
    x_value = set(y)
    ent1=0.0
    for i in x_value:
        ent1=y.count(i)/len(y)*(-1)*np.log2(y.count(i)/len(y))+ent1
    return ent1

条件熵

#计算条件熵
import numpy as np
def Entropy_x_y(y,x):
    x_value = set(x)
    ent=0.0
    k=1
    x=np.array(x)
    y=np.array(y)
    for i in x_value:
        if k>=2:
            x=np.array(x)
            y=np.array(y)
        sub_y=(y[x==i])
        temp_ent=Entropy_y(list(sub_y))
        x=list(x)
        y=list(y)
        ent=(temp_ent*(x.count(i))/(len(y)))+ent
        k=k+1
    return ent

信息增益代码

#计算信息增益
def Gain_ent(x,y):
    ent_y = Entropy_y(y)
    ent_x_y = Entropy_x_y(y,x)
    ent_gain = ent_y - ent_x_y
    return ent_gain

节点划分

根据各个变量的信息增益计算结果,“纹理”的信息增益是最大的,因此“纹理”作为首要变量,建立起决策树的第一层,而且“纹理”有三个水平,分别为“模糊”、“清晰”、“稍糊”。建树的第一层如下图
在这里插入图片描述
在第一层决策树的基础之上,再重新计算各个变量的信息增益,进而建立第二层决策树
例如,当纹理为“稍糊”的时候。其余变量的信息增益为:
G a i n ( 好 瓜 , 根 蒂 ) = 0.073 G a i n ( 好 瓜 , 声 音 ) = 0.322 G a i n ( 好 瓜 , 脐 部 ) = 0.171 G a i n ( 好 瓜 , 触 感 ) = 0.722 G a i n ( 好 瓜 , 色 泽 ) = 0.322 Gain(好瓜,根蒂)=0.073\\ Gain(好瓜,声音)=0.322\\ Gain(好瓜,脐部)=0.171\\ Gain(好瓜,触感)=0.722\\ Gain(好瓜,色泽)=0.322\\ Gain()=0.073Gain()=0.322Gain()=0.171Gain()=0.722Gain()=0.322
则触感是最重要的变量,即作为纹理为“稍糊”的时候的第二层决策树,以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值