一、信息熵的簡介
2.1 信息的概念
信息是用來消除隨機不確定性的東西。對於機器學習中的決策樹而言,如果待分類的事物集合可以划分為多個類別當中,則第k類的信息可以定義如下:
2.2 信息熵概念
信息熵是用來度量不確定性,當熵越大,k的不確定性越大,反之越小。假定當前樣本集合D中第k類樣本所占的比例為pk (k=1,2,...,|y|),則D的信息熵定義為:
信息增益在決策樹算法中是用來選擇特征的指標,信息增益越大,則這個特征的選擇性越好。同上,計算特征a對樣本集D進行划分所獲得的信息增益為:
其中:V表示依據特征a對樣本集D划分后,獲得的總共類別數量;表示每一個新類別中樣本數量。
事實上,信息增益准則對可取值數目較多的特征有所偏好,為了減少這種偏好可能帶來的不利影響,C4.5決策樹算法使用了“增益率”:
其中IV(a)稱為屬性a的“固有值”:
需要注意的是,增益率准則對可取值數目較少的屬性所有偏好,因此,C4.5算法並不是直接選擇增益率最大的候選划分屬性,而是使用了一個啟發式:先從候選划分屬性中找出信息增益高於平均水平的屬性,再從中選擇增益率最高的。
2.3 信息熵在決策樹中的應用(C4.5算法)
C4.5是決策樹算法的一種。決策樹算法作為一種分類算法,目標就是將具有p維特征的n個樣本分到c個類別中去。相當於做一個投影,c=f(n),將樣本經過一種變換賦予一種類別標簽。決策樹為了達到這一目的,可以把分類的過程表示成一棵樹,每次通過選擇一個特征來進行分叉。
那么怎樣選擇分叉的特征呢?每一次分叉選擇哪個特征對樣本進行划分可以最快最准確的對樣本分類呢?不同的決策樹算法有着不同的特征選擇方案。ID3用信息增益,C4.5用信息增益率,CART用gini系數。
下面以一個例子來直觀理解決策樹過程。數據集D有四個屬性(特征),特征集合A={ 天氣,溫度,濕度,風速},類別集合L={進行,取消}。
第一步:計算樣本集D的信息熵
類別信息熵表示的是所有樣本中各種類別出現的不確定性之和。根據熵的概念,熵越大,不確定性就越大,識別類別標簽所需要的信息量就越多。
Ent(D) = -9/14*log2(9/14) – 5/14*log2(5/14) = 0.940
第二步:依據每個特征划分樣本集D,並計算每個特征(划分樣本集D后)的信息熵
Ent(天氣) = 5/14*[-2/5*log2(2/5)-3/5*log2(3/5)] + 4/14*[-4/4*log2(4/4)] + 5/14*[-3/5log2(3/5) – 2/5*log2(2/5)] = 0.694
Ent(溫度) = 0.911
Ent(濕度) = 0.789
Ent(風速) = 0.892
第三步:計算信息增益
信息增益就是ID3算法的特征選擇指標。信息增益的 = 熵 - 條件熵,在這里就是類別信息熵 - 屬性信息熵,它表示的是信息不確定性減少的程度。如果一個屬性的信息增益越大,就表示用這個屬性進行樣本划分可以更好的減少划分后樣本的不確定性,當然,選擇該屬性就可以更快更好地完成我們的分類目標。
Gain(天氣) = Ent(D) - Ent(天氣) = 0.246
Gain(溫度) = Ent(D) - Ent(溫度) = 0.029
Gain(濕度) = Ent(D) - Ent(濕度) = 0.150
Gain(風速) = Ent(D) - Ent(風速) = 0.048
第四步:計算屬性(特征)分裂信息度量
用分裂信息度量來考慮某種屬性進行分裂時分支的數量信息和尺寸信息,我們把這些信息稱為屬性的內在信息(instrisic information)。信息增益率用信息增益 / 內在信息,會導致屬性的重要性隨着內在信息的增大而減小(即,如果這個屬性本身不確定性就很大,那就越不傾向於選取它),這對單純用信息增益有所補償。
IV(天氣) = -5/14*log2(5/14) – 4/14*log2(4/14) – 5/14*log2(5/14) = 1.577
IV(溫度) = 1.556
IV(濕度) = 1.000
IV(風速) = 0.985
第五步:計算信息增益率
Gain_ratio(天氣) = 0.246 / 1.577 = 0.155
Gain_ratio(溫度) = 0.0187
Gain_ratio(濕度) = 0.151
Gain_ratio(風速) = 0.048
天氣的信息增益率最高,選擇天氣為分裂屬性。發現分裂了之后,天氣是“陰”的條件下,類別是”純“的,所以把它定義為葉子節點,選擇不“純”的結點繼續分裂。
在子結點當中重復過程1~5。至此,這個數據集上C4.5的計算過程就算完成了,一棵樹也構建出來了。
總結(C4.5):
While (當前節點“不純”):
- 計算當前節點的類別熵Ent(D) (以類別取值計算)
- 計算當前節點的屬性(特征)熵Ent(pi) (按照屬性(特征)取值下的類別取值計算)
- 計算各個屬性(特征)的信息增益Gain(pi) = Ent(D) – Ent(pi)
- 計算各個屬性(特征)的分類信息度量(內在信息)IV(pi) (按照屬性(特征)取值計算)
- 計算各個屬性(特征)的信息增益率
End while
當前節點設置為葉子節點
二、基尼系數概念
我們知道,在ID3算法中我們使用了信息增益來選擇特征,信息增益大的優先選擇。在C4.5算法中,采用了信息增益比來選擇特征,以減少信息增益容易選擇特征值多的特征的問題。但是無論是ID3還是C4.5,都是基於信息論的熵模型的,這里面會涉及大量的對數運算。能不能簡化模型同時也不至於完全丟失熵模型的優點呢?有!CART分類樹算法使用基尼系數來代替信息增益比,基尼系數代表了模型的不純度,基尼系數越小,則不純度越低,特征越好。這和信息增益(比)是相反的。
具體的,在分類問題中,假設有K個類別,第k個類別的概率為pk, 則基尼系數的表達式為:
對於個給定的樣本D,假設有K個類別,第k個類別的數量為,則樣本D的基尼系數表達式為:
特別的,對於樣本D,如果根據特征A的某個值a,把D分成D1和D2兩部分,則在特征A的條件下,D的基尼系數表達式為:
大家可以比較下基尼系數表達式和熵模型的表達式,二次運算是不是比對數簡單很多?尤其是二類分類的計算,更加簡單。但是簡單歸簡單,和熵模型的度量方式比,基尼系數對應的誤差有多大呢?對於二類分類,基尼系數和熵之半的曲線如下:
從上圖可以看出,基尼系數和熵之半的曲線非常接近,僅僅在45度角附近誤差稍大。因此,基尼系數可以做為熵模型的一個近似替代。而CART分類樹算法就是使用的基尼系數來選擇決策樹的特征。同時,為了進一步簡化,CART分類樹算法每次僅僅對某個特征的值進行二分,而不是多分,這樣CART分類樹算法建立起來的是二叉樹,而不是多叉樹。這樣一可以進一步簡化基尼系數的計算,二可以建立一個更加優雅的二叉樹模型。