信息增益,信息增益率,Gini


1、熵(Entropy)

理论上来说用于决策树的属性选择函数,为方便计算,往往是定义为其属性的不纯性度量,那么必须满足如下三个条件:

  • 当结点很纯时,其度量值应为0
  • 当不纯性最大时(比如所有类都有同样的可能),其度量值应最大
  • 度量应该服从多级特性,这样决策树才能分阶段建立起来
    measure([2,3,4])=measure([2,7])+79×measure([3,4])
     

而熵(Entropy)能够满足以上三点特性。熵(Entropy)是由“信息论之父”香农提出的,更多的各种历史、数学理论请查看参考[1]。接下来,看看熵的计算公式如下:

entropy(p1,p2,,pn)=p1log2(p1)p2log2(p2)pnlog2(pn)

其中, pi 为比例值。其实,熵也可以用另外一种意思来解释:

Given a probability distribution, the info required to predict an event is the distribution’s entropy. Entropy gives the information required in bits (this can involve fractions of bits!)

可以简单的理解为“熵”描述了用来预测的信息位数。接下来看个例子:

如下表所述的天气数据,学习目标是预测Play or not play?

表1 天气预报数据集例子

OutlookTemperatureHumidityWindyPlay?
sunnyhothighfalseno
sunnyhothightrueno
overcasthothighfalseyes
rainmildhighfalseyes
raincoolnormalfalseyes
raincoolnormaltrueno
overcastcoolnormaltrueyes
sunnymildhighfalseno
sunnycoolnormalfalseyes
rainmildnormalfalseyes
sunnymildnormaltrueyes
overcastmildhightrueyes
overcasthotnormalfalseyes
rainmildhightrueno

共14个实例,9个正例(yes),5个负例(no)。

这样当前数据的信息量(原始状态)用熵来计算就是:

info(play?)=info([9,5])=entropy(914,514)=914log2(914)514log2(514)=0.410+0.530=0.940

有了上面计算熵(信息)的基础,接下来看信息增益了。

 

2、信息增益(Info Gain)

信息增益,按名称来理解的话,就是前后信息的差值,在决策树分类问题中,即就是决策树在进行属性选择划分前和划分后的信息差值,即可以写成:

gain()=infobeforeSplit()infoafterSplit()

如上面的例子,通过使用Outlook属性来划分成下图:

image 
图1 使用Outlook属性划分决策树

在划分后,可以看到数据被分成三份,则各分支的信息计算如下:

info([2,3])=25log2(25)35log2(35)=0.971bits

info([4,0])=44log2(44)04log2(04)=0bits
,此处虽然 log2(0) 没有定义,但 0×log2(0) 仍然计算为0。

info([3,2])=35log2(35)25log2(25)=0.971bits

因此,划分后的信息总量应为:

info([2,3],[4,0],[3,2])=514×0.971+414×0+514×0.971=0.693bits

如果把上面的公式整理到一起的话,就是:

$$ info([2,3], [4,0], [3,2]) = \frac{5}{14}\times info([2,3]) + \frac{4}{14}\times info([4,0]) + \frac{5}{14}\times info([3,2])

= 0.347 + 0 + 0.347 = 0.694 bits $$

从上面可以看出,划分后的信息总量计算公式为:

info(S1,,Sn)=in|Si||S|×entropy(Si)

其中,n表示划分后的分支数目, |S| 表示划分前的实例个数, |Si| 表示划分后某个分支的实例个数。

最后,信息增益

gain(outlook|play?)=infobeforeSplit()infoafterSplit()=info(play?)info([3,2],[4,0],[3,2])=0.9400.694=0.246bits

通过划分其他属性,可得到其他的树如下:

image 
图2 使用其他属性划分决策树

同样计算,

gain(Temperature|play?)=info([9,5])info([2,2],[4,2],[3,1])=0.940(414×info([2,2])+614×info([4,2])+414×info([3,1]))=0.028bits

gain(Humidity|play?)=0.152bits

gain(Windy|play?)=0.048bits

这样,算法会选择最大的信息增益属性来进行划分,在此处为Outlook属性。接下来在Outlook=sunny结点,按照同样的判断方法,选择其他属性进行划分,

image
图3 继续划分决策树

计算如下:

infobeforeSplit()=info([2,3])=0.971bits
2个正例,3个负例,计算其熵

gain(Temperature|Outlook,Play?)=0.571bits

gain(Humidity|Outlook,Play?)=0.971bits

gain(Winday|Outlook,Play?)=0.020bits

因而可以得到下一个划分结点是Humidity属性。在这里的Temperature有三个值,因而其info([2,2,1])使用简便方法计算为:

info([0,2],[1,1],[1,0])=25×info([0,2])+25×info([1,1])+15×info([1,0])=0.4bits

因此 gain(Temperature|Outlook,Play?)=0.9710.4=0.571bits 。另外,由于要计算的是信息增益最大,在划分前信息总量 infobeforeSplit() 一定的情况下,我们完全可以直接求划分后信息量最小的特性即可。

 

3、信息增益率(Info Gain Ratio)

通过上面的例子,想必对于信息增益的计算步骤已经熟悉些了。那么下面来看信息增益存在的一个问题:假设某个属性存在大量的不同值,如ID编号(在上面例子中加一列为ID,编号为a~n),在划分时将每个值成为一个结点,这样就形成了下面的图:

image
图4 信息增益偏向

最终计算得到划分后的信息量为: info(S1,,Sn)=ni=1|Si||S|×entropy(Si)=0 ,因为 entropy(Si)=info([1,0]) info([0,1]) ,只含一个纯结点。这样决策树在选择属性时,将偏向于选择该属性,但这肯定是不正确(导致过拟合)的。因此有必要使用一种更好的方法,那就是C4.5中使用的信息增益率(Info Gain Ratio),其考虑了分支数量和尺寸的因素,使用称为内在信息(Intrinsic Information)的概念。

Gain ratio takes number and size of branches into account when choosing an attribute, and corrects the information gain by taking the intrinsic information of a split into account (i.e. how much info do we need to tell which branch an instance belongs to).

内在信息(Intrinsic Information),可简单地理解为表示信息分支所需要的信息量,其计算公式如下:

IntrinsicInfo(S,A)=|Si||S|log2|Si||S|

则针对上图中的例子,

info([1,1,,1])=14×(114log2114)=3.807bits

信息增益率则计算如下:

gainratio(Attribute)=gain(Attribute)IntrinsicInfo(Attribute)

依然如上例:

gainratio(IDCode)=0.940bits3.807bits=0.246

实际上可以看出,属性的重要性会随着其内在信息(Intrinsic Information)的增大而减小。 信息增益率作为一种补偿(Compensate)措施来解决信息增益所存在的问题,但是它也有可能导致过分补偿,而选择那些内在信息很小的属性,这一点可以尝试:首先,仅考虑那些信息增益超过平均值的属性,其次再比较信息增益。

 

4、Gini Index

在CART里面划分决策树的条件是采用Gini Index,定义如下:

gini(T)=1j=1np2j

其中, pj 是类j在T中的相对频率,当类在T中是倾斜的时,gini(T)会最小。

将T划分为T1(实例数为N1)和T2(实例数为N2)两个子集后,划分数据的Gini定义如下:

ginisplit(T)=N1Ngini(T1)+N2Ngini(T2)

然后选择其中最小的 ginisplit(T) 作为结点划分决策树。

 

5、参考

本文大量地参考了如下资料:

[1] http://en.wikipedia.org/wiki/Entropy (EN), http://zh.wikipedia.org/wiki/%E7%86%B5 (CN)

[2] Data Mining examples: www.liacs.nl/home/joost/DM/mod_06_dec_tree_intro.ppt

[3] Data Mining – Practical Machine Learning Tools and Techniques with Java

 

内容写了这么多,就到此为止吧,要不然就没完没了了,下一步考虑分析Weka中的信息增益(weka.attributeSelection.InfoGainAttributeEval)以及信息增益率(weka.attributeSelection.GainRatioAttributeEval)的实现。错误之处,欢迎指正!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值