我们为什么需要信息增益比,而不是信息增益?
2015-06-10 00:41
555 查看
我们为什么需要信息增益比,而不是信息增益?
表一 满足什么情况才去玩高尔夫 [1]
Day | Temperatrue | Outlook | Humidity | Windy | PlayGolf? |
---|---|---|---|---|---|
07-05 | hot | sunny | high | false | no |
07-06 | hot | sunny | high | true | no |
07-07 | hot | overcast | high | false | yes |
07-09 | cool | rain | normal | false | yes |
07-10 | cool | overcast | normal | true | yes |
07-12 | mild | sunny | high | false | no |
07-14 | cool | sunny | normal | false | yes |
07-15 | mild | rain | normal | false | yes |
07-20 | mild | sunny | normal | true | yes |
07-21 | mild | overcast | high | true | yes |
07-22 | hot | overcast | normal | false | yes |
07-23 | mild | sunny | high | true | no |
07-26 | cool | sunny | normal | true | no |
07-30 | mild | sunny | high | false | yes |
对于ID3ID3和C4.5C4.5的信息增益和信息增益比有什么区别呢,为什么放着信息增益不用,又要计算一个gainratiogain ratio呢?这就是下面的内容要讨论的。
讨论之前先来几个公式压压惊。
在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量[2]。设X的概率分布为 P(X=Xi)=pi,i=1,2,...,nP(X=X_i)=p_i , i=1,2,...,n
则随机变量XX 的熵定义为H(X)=−∑i=1npilogpiH(X)=-\sum _{i=1}^n p_i log p_i
其实公式看起来挺吓人的,但是计算的时候很简单。拿表一作为计算的例子,假设p1=Num(no)/(Num(no)+Num(yes))p_1=Num(no)/(Num(no)+Num(yes)),p2=Num(yes)/(Num(no)+Num(yes)) p_2=Num(yes)/(Num(no)+Num(yes)) 那么H(D)=−514log514−914log914=0.9403H(D)= -{5\over14}log {5\over14} - {9\over14}log {9\over14} =0.9403
条件熵定义为H(D|A)=∑i=1npiH(Y|A=ai)H(D|A)=\sum_{i=1}^np_iH(Y|A=a_i)
条件熵在这里指的就是特征AA对训练数据集DD经验条件熵,再举一个例子,假如把Outlook作为分隔样本的特征的话,那么
E(Outlook=sunny)=−25log25−35log35=0.971E(Outlook=sunny)=-{2\over5}log {2\over5} - {3\over5}log {3\over5} =0.971 E(Outlook=overcast)=−1log1−0log0=0E(Outlook=overcast)=-1log {1} - {0}log0 =0 E(Outlook=rainy)=−35log35−25log25=0.971E(Outlook=rainy)=-{3\over5}log {3\over5} - {2\over5}log {2\over5} =0.971
所以H(D|A)=514⋅0.971+414⋅0+514⋅0.971=0.693H(D|A) = {5\over14}\cdot0.971+{4\over14}\cdot0+{5\over14}\cdot0.971=0.693
得到了熵和条件熵,那么信息增益就好求了,公式如下g(D,A)=H(D)−H(D|A)g(D,A)=H(D)-H(D|A)
所以,g(D,Outlook)=0.9403−0.693g(D,Outlook)=0.9403-0.693,以此类推,可以求得g(D,Temperatrue)g(D,Temperatrue) g(D,Humidity)g(D, Humidity) g(D,Windy)g(D, Windy),信息增益越大说明该特征对于减少样本的不确定性程度的能力越大,也就代表这个特征越好。这种选择特征的思路就是ID3算法选择特征的核心思想。
本来ID3ID3算法计算信息增益好好的,但是C4.5C4.5一定要计算信息增益比(gainratiogain ratio)这是为什么呢?
还是以表一为例,假如我们想用Day来做为特征(当然实际上一般人也不会傻到用Day用做特征),显然,每一天都可以将样本分开,也就是形成了一颗叶子数量为14,深度只有两层的树。这种样本分隔的结果就是计算出来的H(D|Day)=0H(D|Day)=0,那么g(D,Day)=0.9403g(D,Day)=0.9403, 这特征可真是够“好”的!不过显然这种特征对于样本的分隔没有任何意义。类似的情况还有人们的身份证号、信用卡号、学号等等特征。
那么导致这样的偏差的原因是什么呢?从上面的例子应该能够感受出来,原因就是该特征可以选取的值过多。解决办法自然就想到了如何能够对树分支过多的情况进行惩罚,这样就引入了下面的公式,属性AA的内部信息(Intrinsic Information of an Attribute):IntI(D,A)=∑i|Di||D|log(|Di||D|)IntI(D,A)=\sum_i{|D_i|\over|D|}log({|D_i|\over|D|}) 这样对于天气来说IntI(Day)=14⋅(−114⋅log(114))=3.807IntI(Day)=14\cdot(-{1\over14}\cdot log({1\over14}))=3.807
这就是针对分支数目的惩罚项,
这样信息增益比公式就出来了:gr(D|A)=g(D)−g(D|A)IntI(D,A)g_r(D|A)={g(D)-g(D|A)\over IntI(D,A)}
总结上面的公式,计算得到下表:
OutLook | Temperatrue |
---|---|
Gain:0.940-0.693 = 0.247 | Gain:0.940-0.911 = 0.029 |
Gain ratio: 0.245/1.577 = 0.157 | Gain ratio:0.029/1.557 = 0.019 |
Humidity | Windy |
---|---|
Gain:0.940-0.788 = 0.152 | Gain:0.940-0.911 = 0.029 |
Gain ratio: 0.152/1.000 = 0.152 | Gain ratio:0.048/0.985 = 0.049 |
Day |
---|
Gain ratio:0.940/3.807 = 0.246 |
不过虽然这样,信息增益率还是要比信息增益可靠的多的!另外也可以看出,对特征的筛选也是非常重要的步骤,可以减少信息增益率失效的几率。
[1] http://www.ke.tu-darmstadt.de/lehre/archiv/ws0809/mldm/dt.pdf
[2] 李航. 统计学习方法.
相关文章推荐
- Android注入框架你应该知道的一切------打造自己的注入框架
- struts1.x和struts2.x随笔
- Interleaving String
- 求排列组合算法
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- Nginx 战斗准备 —— 优化指南
- Python图像处理(10):从2.4.11到3.0.0
- 字典转模型
- Android 模拟器测试远程服务器成功,但是到真机上测试一点反应没有的解决办法
- UVa 11094 - Continents
- NOJ1119 仙林鼎山游乐园
- jquery源码之工具方法
- nginx 伪静态 rewrite
- ZXing CaptureActivity黑屏问题
- 我的CTF之旅(一)
- Github上的star和fork是什么
- backbone学习进阶二
- android屏幕适配
- NOJ1113 斐波那契数应用 模拟
- spring mvc 注解基本配置(@resource,@autowired,@Component...)