2.1、决策树之信息增益与熵

来源:互联网 发布:阿里云个人免费邮箱 编辑:程序博客网 时间:2024/06/05 21:57

一、信息增益与熵

 

 在信息论中,熵被用来衡量一个随机变量出现的期望值。变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大,熵是整个系统的平均消息量。信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。所以,信息熵也可以说是系统有序化程度的一个度量。

 信息熵计算公式是:H(x)=E[I(xi)]=E[ log(1/p(xi)) ]=-p(xi)log(p(xi))(i=1,2,..n)

自信息,又称信息本体,用来衡量单一事件发生时所包含的信息量的多少。如果事件发生的机率是P(x),则信息本体I(x)的定义就是:-logP(x))。互信息(Mutual Information)是一有用的信息度量,它是指两个事件集合之间的相关性。(PMI

       在信息增益中,衡量标准是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。对一个特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量。所谓信息量,其实就是熵。信息增益的计算过程如下:

 

1计算熵:熵越高,混合的数据也越多。

我们检查的属性是是否出去玩。用Excel对上面数据的play变量的各个取值排个序(这个工作簿里把“play”这个词去掉),一共是14条记录,你能数出取值为yes的记录有9个,取值为no的有5个,我们说这个样本里有9个正例,5个负例,记为S(9+,5-)S是样本的意思(Sample)

这里熵记为Entropy(S),计算公式为:Entropy(S)= -(9/14)*log(9/14)-(5/14)*log(5/14)

解释一下,9/14是正例的个数与总记录之比,同样5/14是负例占总记录的比例。log(.)是以2为底的对数(我们知道以e为底的对数称为自然对数,记为ln(.),lg(.)表示以10为底的对数)。

键入以下公式即得0.940=-(9/14)*LOG(9/14,2)-(5/14)*LOG(5/14,2)

这里LOG(9/14,2)中的“2”表示以2为底。

 

类似地,如果你习惯用Matlab做数学运算本,公式为-(9/14)*log2(9/14)-(5/14)*log2(5/14)        其中“2”的含义与上同。

总结:在这个例子中,我们的输出属性(我们要检查的属性)“play”只有两个取值,同样地,如果输出属性的取值大于2,公式是对成的,一样的形式,连加就是,找到各个取值的个数,求出各自的比例。

如果样本具有二元输出属性,其熵的公式为

Entropy(S)=-(p+)*log(p+)-(p-)*log(p-)

其中,p+p-分别为正例和负例占总记录的比例。输出属性取值大于2的情况,公式是对称的。

直接给出计算熵与信息增益的R代码:计算给定数据集的熵

calcent<-function(data){  

   nument<-length(data[,1])  

   key<-rep("a",nument)  

   for(i in 1:nument)  

       key[i]<-data[i,length(data)]  

   ent<-0  

   prob<-table(key)/nument  

   for(i in 1:length(prob))  

   ent=ent-prob[i]*log(prob[i],2)  

   return(ent)  

}  

 

来自 <http://blog.csdn.net/yujunbeta/article/details/14986219>

 

 

2分别以WindHumidityOutlookTemperature作为根节点,计算其信息增益

可以数得,属性Wind中取值为Weak的记录有Normal的记录有8条,其中正例6个,负例2个;同样,取值为Strong的记录6个,正例负例个3个。我们可以计算相应的熵为:

Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811

Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0

 

现在就可以计算出相应的信息增益了:

Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048

这个公式的奥秘在于,8/14是属性Wind取值为Weak的个数占总记录的比例,同样6/14是其取值为Strong的记录个数与总记录数之比。

 

同理,如果以Humidity作为根节点:

Entropy(High)=0.985; Entropy(Normal)=0.592

Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151

 

Outlook作为根节点:

Entropy(Sunny)=0.971; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971

Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247

 

Temperature作为根节点:

Entropy(Cool)=0.811; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918

Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029

 

这样我们就得到了以上四个属性相应的信息增益值:

Gain(Wind)=0.048Gain(Humidity)=0.151 Gain(Outlook)=0.247Gain(Temperature)=0.029

 

最后按照信息增益最大的原则选Outlook为根节点。子节点重复上面的步骤。

0 0
原创粉丝点击