信息增益


一:基礎知識

1:個體信息量

  -long2pi

2:平均信息量(熵)

  Info(D)=-Σi=1...n(pilog2pi)

  比如我們將一個立方體A拋向空中,記落地時着地的面為f1,f1的取值為{1,2,3,4,5,6},f1的熵entropy(f1)=-(1/6*log(1/6)+...+1/6*log(1/6))=-1*log(1/6)=2.58

3:假設我們選擇屬性R作為分裂屬性,數據集D中,R有k個不同的取值{V1,V2,...,Vk},於是可將D根據R的值分成k組{D1,D2,...,Dk},按R進行分裂后,將數據集D不同的類分開還需要的信息量為:

  InfoR(D)=Σi=1...k(Di/D)Info(Di)

4:信息增益:分裂前后,兩個信息量只差:

  Gain(R)=Info(D)-InfoR(D)

5:增益比率

  信息增益選擇方法有一個很大的缺陷,它總是會傾向於選擇屬性值多的屬性,如果我們在上面的數據記錄中加一個姓名屬性,假設14條記錄中的每個人姓名不同,那么信息增益就會選擇姓名作為最佳屬性,因為按姓名分裂后,每個組只包含一條記錄,而每個記錄只屬於一類(要么購買電腦要么不購買,信息量計算為1/14(-1/1log1/1-0/1log0/1)*14=0,信息增益最大),因此純度最高,以姓名作為測試分裂的結點下面有14個分支。但是這樣的分類沒有意義,它沒有任何泛化能力。增益比率對此進行了改進,它引入一個分裂信息:

  SplitInfoR(D)=-Σi=1...n(Di/D)log2(Di/D)

  增益比率定義為信息增益與分裂信息的比率:

  GainRatio(R)=Gain(R)/SplitInfoR(D)

  我們找GainRatio最大的屬性作為最佳分裂屬性。如果一個屬性的取值很多,那么SplitInfoR(D)會大,從而使GainRatio(R)變小。

  不過增益比率也有缺點,SplitInfo(D)可能取0,此時沒有計算意義;且當SplitInfo(D)趨向於0時,GainRatio(R)的值變得不可信,改進的措施就是在分母加一個平滑,這里加一個所有分裂信息的平均值:

  GainRatio(R)=Gain(R)/(SplitInfo(D)+SplitInfoR(D))

二:例子

 

記錄ID 年齡 收入層次 學生 信用等級 是否購買電腦
1 青少年 一般
2 青少年 良好
3 中年 一般
4 老年 一般
5 老年 一般
6 老年 良好
7 中年 良好
8 青少年 一般
9 青少年 一般
10 老年 一般
11 青少年 良好
12 中年 良好
13 中年 一般
14 老年 良好

1:計算Info(D)

  Info(D)=-Σi=1...n(pilogpi)=-(5/14)log(5/14)-(9/14)log(9/14)=-0.3571*(-1.4856)-0.6429*(-0.6373)=0.1597+0.1234=0.5305+0.4097=0.9402

2:計算InfoR(D)

  Info年齡(D)=(5/14)Info(D老年)+(4/14)Info(D中年)+(5/14)Info(D青少年)=(5/14)(-(3/5)log(3/5)-(2/5)log(2/5))+(4/14)(-(4/4)log(4/4)-(0/4)log(0/4))+(5/14)(-(2/5)log(2/5)-(3/5)log(3/5))

        =(5/14)(0.6*0.737+0.4*1.3219)+(4/14)(0+0)+(5/14)(0.4*1.3219+0.6*0.737)

        =(5/14)(0.4422+0.52876)+0+(5/14)(0.52876+0.4422)

        =0.3571*0.97096+0+0.3571*0.97096

        =0.694

  同樣可以計算出

  Info收入層次(D)=0.911

  Info學生(D)=0.789

  Info信用等級(D)=0.892

3:計算信息增益:

  Gain(年齡)=Info(D)-Info年齡(D)=0.940-0.694=0.246

  Gain(收入層次)=Info(D)-Info收入層次(D)=0.940-0.911=0.029

  Gain(學生)=Info(D)-Info學生(D)=0.940-0.789=0.151

  Gain(信用等級)=Info(D)-Info信用等級(D)=0.940-0.892=0.058

4:計算分裂信息:

  SplitInfo年齡(D)=-5/14log(5/14)-4/14log(4/14)-5/14log(5/14)=0.3571*1.4856+0.2857*1.8074+0.3571*1.4856=0.5305+0.5164+0.5305=1.5774

  SplitInfo收入層次(D)=-4/14log(4/14)-6/14log(6/14)-4/14log(4/14)=0.2857*1.8074+0.4286*1.2223+0.2857*1.8074=0.5164+0.5139+0.5164=1.5467

  SplitInfo學生(D)=-7/14log7/14-7/14log7/14=1

  SplitInfo信用等級(D)=-6/14log(6/14)-8/14log(8/14)=0.4286*1.2223+0.5714*0.8074=0.5239+0.4613=0.9852

  SplitInfo(D)=(SplitInfo年齡(D)+SplitInfo收入層次(D)+SplitInfo學生(D)+SplitInfo信用等級(D))/4=1.2773

5:計算增益比率:

  GainRatio(年齡)=Gain(年齡)/(SplitInfo(D)+SplitInfo年齡(D))=0.246/(1.2773+1.5774)=0.0862

  GainRatio(收入層次)=Gain(收入層次)/(SplitInfo(D)+SplitInfo收入層次(D))=0.029/(1.2773+1.5467)=0.0103

  GainRatio(學生)=Gain(學生)/(SplitInfo(D)+SplitInfo學生(D))=0.151/(1.2773+1)=0.0663

  GainRatio(信用等級)=Gain(信用等級)/(SplitInfo(D)+SplitInfo信用等級(D))=0.058/(1.2773+0.9852)=0.0256


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM