【机器学习】决策树算法属性筛选度量标准

本文详细介绍了决策树算法中用于属性筛选的度量标准,包括信息熵、信息增益、信息增益率和基尼系数。信息熵衡量的是数据的不确定性,信息增益用于选择最优划分属性,而信息增益率修正了信息增益对属性取值数量的偏好。基尼系数是CART算法中的不纯度度量,用于选择基尼指数最小的属性。通过这些指标,决策树能够构建高效且准确的分类模型。
摘要由CSDN通过智能技术生成

决策树算法属性筛选度量标准


信息论中, (entropy)是接收的每条消息中包含的信息的平均量,又被称为 信息熵信源熵平均自信息量。这里,“消息” 代表来自分布或数据流中的事件、样本或特征。熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在 信息论里面,熵是对不确定性的测量。在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。

信息熵

1948年,香农(Shannon)引入热力学中的熵概念来衡量信息量。熵是各种可能性的熵以概率为权重进行加和,每个可能性可以用 log ⁡ 1 p = − log ⁡ p \log \frac{1}{p} = - \log p logp1=logp 来表示。对于信息 x x x,其所含的信息量为
I ( x ) = log ⁡ 1 p ( x ) = − log ⁡ p ( x ) \mathrm{I}(x) = \log \frac{1}{p(x)} = -\log p(x) I(x)=logp(x)1=logp(x)
其中, p ( x ) p(x) p(x) 为信息 x x x 发生的概率。

信息熵是信息量的数学期望,是信源发出信息前的先验不确定性,也称先验熵。对于随机变量 X X X x 1 , x 2 , ⋯   , x n x_1,x_2,\cdots,x_n x1,x2,,xn 为来自总体的简单样本,其概率密度分布为
P ( X = x i ) = p i \mathrm{P}(X = x_i) = p_i P(X=xi)=pi
满足
∑ i = 1 n p i = 1 \sum_{i=1}^n p_i = 1 i=1npi=1
X X X 的熵定义为
H ( X ) = I E ( x 1 , x 2 , ⋯   , x n ) = ∑ i = 1 n p i I ( x i ) = − ∑ i = 1 n p i log ⁡ p i \mathrm{H}(X) = \mathrm{I}_E(x_1,x_2,\cdots,x_n) = \sum_{i=1}^n p_i I(x_i) = -\sum_{i=1}^np_i\log p_i H(X)=IE(x1,x2,,xn)=i=1npiI(xi)=i=1npilogpi
设存在信源 x 1 , x 2 x_1,x_2 x1,x2,下图为信息熵 H \mathrm{H} H 随信源 x 1 x_1 x1 的发生概率 P ( x 1 ) P(x_1) P(x1) 的变化图,当 P ( x 1 ) = 1 P(x_1) = 1 P(x1)=1 P ( x 2 ) = 0 P(x_2) = 0 P(x2)=0 时,则信息熵 H = 0 \mathrm{H} = 0 H=0 表示没有发送的不确定性。而当 P ( x 1 ) = 0.5 P(x_1) = 0.5 P(x1)=0.5 时,熵达到最大,不确定性最大。

信息熵随信源  概率变化图

举例来说,如果一个分类系统中,类别的标识是 c c c,取值情况是 c 1 , c 2 , ⋯   , c n c_1 , c_2 ,\cdots,c_n c1,c2,,cn n n n 为类别的总数。那么该分类系统的熵为:
H ( c ) = − ∑ i = 1 n p ( c i ) log ⁡ p ( c i ) \mathrm{H}(c) = -\sum_{i=1}^np(c_i)\log p(c_i) H(c)=i=1np(ci)logp(ci)
特别地,如果是个二分类系统,那么此系统的熵为:
H ( c ) = − p ( c 0 ) log ⁡ 2 p ( c 0 ) − p ( c 1 ) log ⁡ p ( c 1 ) \mathrm{H}(c) = -p(c_0)\log_2p(c_0) - p(c_1) \log p(c_1) H(c)=p(c0)log2p(c0)p(c1)logp(c1)
其中 p ( c 0 ) , p ( c 1 ) p(c_0),p(c_1) p(c0),p(c1) 分别为两类样本出现的概率。

信息增益

决策树算法 ID3 的生成使用信息增益。信息增益是基于信息论信息熵自信息理论,被定义为
I G ( T , a ) ⏞ Information Gain = H ( T ) ⏞ Entropy (parent) − H ( T ∣ a ) ⏞ Weighted Sum of Entropy (Children) = − ∑ i = 1 J p i log ⁡ 2 p i − ∑ a p ( a ) ∑ i = 1 J − Pr ⁡ ( i ∣ a ) log ⁡ 2 Pr ⁡ ( i ∣ a ) \begin{aligned} \overbrace {\mathrm{IG}(T,a)} ^{\text{Information Gain}} &=\overbrace {\mathrm {H} (T)} ^{\text{Entropy (parent)}}-\overbrace {\mathrm {H} (T|a)} ^{\text{Weighted Sum of Entropy (Children)}}\\ &=-\sum _{i=1}^{J}p_{i}\log _{2}{p_{i}}-\sum _{a}{p(a)\sum _{i=1}^{J}-\Pr(i|a)\log _{2}{\Pr(i|a)}} \end{aligned} IG(T,a) Information Gain=H(T) Entropy (parent)H(Ta) Weighted Sum of Entropy (Children)=i=1Jpilog2piap(a)i=1JPr(ia)log2Pr(ia)
来看一个 Wikipedia 中给出的例子:

数据集有4个属性:outlook (sunny, overcast, rainy), temperature (hot, mild, cool), humidity (high, normal), 和 windy (true, false), 目标值play(yes, no), 总共14个数据点。

OutlookTemperatureHumidityWindyPlay?
sunnyhothighfalseno
sunnyhothightrueno
overcasthothighfalseyes
rainymildhighfalseyes
rainycoolnormalfalseyes
rainycoolnormaltrueno
overcastcoolnormaltrueyes
sunnymildhighfalseno
sunnycoolnormalfalseyes
rainymildnormalfalseyes
sunnymildnormaltrueyes
overcastmildhightrueyes
overcasthotnormalfalseyes
rainymildhightrueno

为建造决策树,需要比较4棵决策树的信息增益,每棵决策树用一种属性做划分。信息增益最高的划分作为第一次划分,并在每个子节点继续此过程,直至其信息增益为0。

若使用属性windy做划分时,产生2个子节点:windy值为真与为假。当前数据集,6个数据点的windy值为真,其中3个点的play值为真,3个点的play值为假;其余8个数据点的windy为假,其中6个点的play值为真,2个点的play值为假。

  • windy=true的子节点的信息熵计算为:

I E ( [ 3 , 3 ] ) = − 3 6 log ⁡ 2 3 6 − 3 6 log ⁡ 2 3 6 = − 1 2 log ⁡ 2 1 2 − 1 2 log ⁡ 2 1 2 = 1 {\displaystyle \mathrm{I}_{E}([3,3])=-{\frac {3}{6}}\log _{2}^{}{\frac {3}{6}}-{\frac {3}{6}}\log _{2}^{}{\frac {3}{6}}=-{\frac {1}{2}}\log _{2}^{}{\frac {1}{2}}-{\frac {1}{2}}\log _{2}^{}{\frac {1}{2}}=1} IE([3,3])=63log26363log263=21log22121log221=1

  • windy=false的子节点的信息熵计算为:

I E ( [ 6 , 2 ] ) = − 6 8 log ⁡ 2 6 8 − 2 8 log ⁡ 2 2 8 = − 3 4 log ⁡ 2 3 4 − 1 4 log ⁡ 2 1 4 = 0.8112781 {\displaystyle \mathrm{I}_{E}([6,2])=-{\frac {6}{8}}\log _{2}^{}{\frac {6}{8}}-{\frac {2}{8}}\log _{2}^{}{\frac {2}{8}}=-{\frac {3}{4}}\log _{2}^{}{\frac {3}{4}}-{\frac {1}{4}}\log _{2}^{}{\frac {1}{4}}=0.8112781} IE([6,2])=86log28682log282=43log24341log241=0.8112781

这个划分(使用属性windy)的信息熵是两个子节点信息熵的加权和:
I E ( [ 3 , 3 ] , [ 6 , 2 ] ) = I E ( windy or not ) = 6 14 ⋅ 1 + 8 14 ⋅ 0.8112781 = 0.8921589 {\displaystyle \mathrm{I}_{E}([3,3],[6,2])=\mathrm{I}_{E}({\text{windy or not}})={\frac {6}{14}}\cdot 1+{\frac {8}{14}}\cdot 0.8112781=0.8921589} IE([3,3],[6,2])=IE(windy or not)=1461+1480.8112781=0.8921589
为计算使用属性windy的信息增益,必须先计算出最初(未划分)的数据集的信息熵,数据集的play有9个yes与5个no:
I E ( [ 9 , 5 ] ) = − 9 14 log ⁡ 2 9 14 − 5 14 log ⁡ 2 5 14 = 0.940286 {\displaystyle \mathrm{I}_{E}([9,5])=-{\frac {9}{14}}\log _{2}^{}{\frac {9}{14}}-{\frac {5}{14}}\log _{2}{\frac {5}{14}}=0.940286} IE([9,5])=149log2149145log2145=0.940286
因此,使用属性windy的信息增益是:
I G ( windy ) = I E ( [ 9 , 5 ] ) − I E ( [ 3 , 3 ] , [ 6 , 2 ] ) = 0.940286 − 0.8921589 = 0.0481271 {\displaystyle \mathrm{IG}({\text{windy}})=\mathrm{I}_{E}([9,5])-\mathrm{I}_{E}([3,3],[6,2])=0.940286-0.8921589=0.0481271} IG(windy)=IE([9,5])IE([3,3],[6,2])=0.9402860.8921589=0.0481271
上面只是举如果按照 Windy 划分算得的信息增益, 那么如果按照Temperature 、 Humidity、 Outlook 划分呢?同理,经计算
I G ( o u t l o o k ) = 0.246 I G ( T e m p e r a t u r e ) = 0.029 I G ( H u m i d i t y ) = 0.151 \begin{aligned} \mathrm{IG(outlook)} = 0.246 \\ \mathrm{IG(Temperature)} = 0.029 \\ \mathrm{IG(Humidity)} = 0.151 \end{aligned} IG(outlook)=0.246IG(Temperature)=0.029IG(Humidity)=0.151
选择最大的信息增益属性进行划分,然后再重复进行上述步骤,直至建好一棵树为止;在本例中第一个分支节点的属性是 Outlook。

注意:取值更多的属性容易使得数据更“纯”,其信息增益更大。决策树会首先挑选这个属性作为树的顶/结点;结果训练出来的形状是一棵庞大且深度很浅的树,这样的划分极不合理。

信息增益率

由于信息增益偏好取值多的属性(极限趋近于均匀分布),所以决策树 C4.5 算法就采用增益率替代了 ID3 算法的信息增益。信息增益率定义为
I G r = I G ( T , a ) H ( a ) \mathrm{IG_{r}}= \frac{\mathrm{IG}(T,a)}{\mathrm{H}(a)} IGr=H(a)IG(T,a)
其中 a a a 为的固有属性, I G ( T , a ) \mathrm{IG}(T,a) IG(T,a) 为按照属性 a a a 划分时的信息增益, H ( a ) \mathrm{H}(a) H(a) 为按照属性 a a a 划分的信息熵。

因此,按属性 Outlook 划分时,信息熵为
I E ( [ 5 , 4 , 5 ] ) = − 5 14 log ⁡ 2 5 14 − 4 14 log ⁡ 2 4 14 − 5 14 log ⁡ 2 5 14 = 1.5774 {\displaystyle \mathrm{I}_{E}([5,4,5])=-{\frac {5}{14}}\log _{2}^{}{\frac {5}{14}}-{\frac {4}{14}}\log _{2}^{}{\frac {4}{14}}-{\frac {5}{14}}\log _{2}^{}{\frac {5}{14}}=1.5774} IE([5,4,5])=145log2145144log2144145log2145=1.5774
信息增益率为
I G r ( o u t l o o k ) = 0.246 1.5774 = 0.15595 \mathrm{IG_{r}}(\mathrm{outlook}) = \frac{0.246}{1.5774} = 0.15595 IGr(outlook)=1.57740.246=0.15595

基尼系数

但是无论是 ID3 还是 C4.5,都是基于信息论的熵模型的,这里面会涉及大量的对数运算(为了避免这个问题)。能不能简化模型同时也不至于完全丢失熵模型的优点呢?有!CART(Classification and Regression Tree)分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低(纯度越高),特征越好。

同样地,对于 n n n 类别 c 1 , c 2 , ⋯   , c n c_1,c_2,\cdots,c_n c1,c2,,cn 样本 T T T,第 i i i 个类别出现地概率为 p k p_k pk,则基尼系数为
G i n i ( T ) = ∑ i = 1 n p i ( 1 − p i ) = 1 − ∑ i = 1 n p i 2 \mathrm{Gini}(T) = \sum_{i=1}^n p_i(1-p_i) = 1- \sum_{i=1}^n p_i^2 Gini(T)=i=1npi(1pi)=1i=1npi2
特别地,对于二分类问题,其基尼系数为
G i n i ( T ) = ∑ i = 1 2 p i ( 1 − p i ) = 1 − ∑ i = 1 2 p i 2 = 2 p ( 1 − p ) \mathrm{Gini}(T) = \sum_{i=1}^2 p_i(1-p_i) = 1- \sum_{i=1}^2 p_i^2 = 2p(1-p) Gini(T)=i=12pi(1pi)=1i=12pi2=2p(1p)
当一个节点中所有样本都是一个类时,基尼不纯度为零。

如果特征 a a a k k k 种类别,则其基尼系数为
G i n i ( T , a ) = ∑ i = 1 k ∣ T i ∣ ∣ T ∣ G i n i ( T i ) \mathrm{Gini}(T,a) = \sum_{i=1}^k \frac{|T^i|}{|T|} \mathrm{Gini}(T^i) Gini(T,a)=i=1kTTiGini(Ti)
在特征选取中,会优先选择基尼指数最小的属性作为优先划分属性。
a ∗ = arg ⁡ min ⁡ a ∈ A G i n i ( T , a ) a^* = \mathop{\arg \min}_{a \in A} \mathrm{Gini}(T,a) a=argminaAGini(T,a)

参考资料

[1] 超详细的信息熵、信息增益、信息增益比、基尼系数

[2] 信息增益_信息增益率_Gini, xiaoxiyouran

[3] 决策树学习, Wikipedia

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值