上一篇博文中介紹的是決策樹簡介,熵和信息增益的概念.
這一節中我們一起看一下信息增益率和基尼指數究竟是怎麼回事.
1 決策樹的劃分依據二----信息增益率
1.1 概念
在上面的介紹中,我們有意忽略了"編號"這一列.若把"編號"也作爲一個候選劃分屬性,則根據信息增益公式可計算出它的信息增益爲 0.9182,遠大於其他候選劃分屬性。
計算每個屬性的信息熵過程中,我們發現,該屬性的值爲0, 也就是其信息增益爲0.9182. 但是很明顯這麼分類,最後出現的結果不具有泛化效果.無法對新樣本進行有效預測.
實際上,信息增益準則對可取值數目較多的屬性有所偏好,爲減少這種偏好可能帶來的不利影響,著名的 C4.5 決策樹算法 [Quinlan, 1993J 不直接使用信息增益,而是使用"增益率" (gain ratio) 來選擇最優劃分屬性.
**增益率:**增益率是用前面的信息增益Gain(D, a)和屬性a對應的"固有值"(intrinsic value) [Quinlan , 1993J的比值來共同定義的。
屬性 a 的可能取值數目越多(即 V 越大),則 IV(a) 的值通常會越大.
1.2 案例
1.2.1 案例一
a.計算類別信息熵
b.計算性別屬性的信息熵(性別、活躍度)
c.計算活躍度的信息增益(性別、活躍度)
ps:上面三步驟已經在上一篇博文中實現,在此不再贅述.
d.計算屬性分裂信息度量
用分裂信息度量來考慮某種屬性進行分裂時分支的數量信息和尺寸信息,我們把這些信息稱爲屬性的內在信息(instrisic information)。信息增益率用信息增益/內在信息,會導致屬性的重要性隨着內在信息的增大而減小**(也就是說,如果這個屬性本身不確定性就很大,那我就越不傾向於選取它)**,這樣算是對單純用信息增益有所補償。
e.計算信息增益率
活躍度的信息增益率更高一些,所以在構建決策樹的時候,優先選擇
通過這種方式,在選取節點的過程中,我們可以降低取值較多的屬性的選取偏好。
1.2.2 案例二
如下圖,第一列爲天氣,第二列爲溫度,第三列爲溼度,第四列爲風速,最後一列該活動是否進行。
我們要解決:根據下面表格數據,判斷在對應天氣下,活動是否會進行?
該數據集有四個屬性,屬性集合A={ 天氣,溫度,溼度,風速}, 類別標籤有兩個,類別集合L={進行,取消}。
a.計算類別信息熵
類別信息熵表示的是所有樣本中各種類別出現的不確定性之和。根據熵的概念,熵越大,不確定性就越大,把事情搞清楚所需要的信息量就越多。
b.計算每個屬性的信息熵
每個屬性的信息熵相當於一種條件熵。他表示的是在某種屬性的條件下,各種類別出現的不確定性之和。屬性的信息熵越大,表示這個屬性中擁有的樣本類別越不“純”。
c.計算信息增益
信息增益的 = 熵 - 條件熵,在這裏就是 類別信息熵 - 屬性信息熵,它表示的是信息不確定性減少的程度。如果一個屬性的信息增益越大,就表示用這個屬性進行樣本劃分可以更好的減少劃分後樣本的不確定性,當然,選擇該屬性就可以更快更好地完成我們的分類目標。
信息增益就是ID3算法的特徵選擇指標。
假設我們把上面表格1的數據前面添加一列爲"編號",取值(1–14).
若把"編號"也作爲一個候選劃分屬性,則根據前面步驟: 計算每個屬性的信息熵過程中,我們發現,該屬性的值爲0, 也就是其信息增益爲0.940. 但是很明顯這麼分類,最後出現的結果不具有泛化效果.此時根據信息增益就無法選擇出有效分類特徵。所以,C4.5選擇使用信息增益率對ID3進行改進。
d.計算屬性分裂信息度量
用分裂信息度量來考慮某種屬性進行分裂時分支的數量信息和尺寸信息,我們把這些信息稱爲屬性的內在信息(instrisic information)。信息增益率用信息增益/內在信息,會導致屬性的重要性隨着內在信息的增大而減小**(也就是說,如果這個屬性本身不確定性就很大,那我就越不傾向於選取它)**,這樣算是對單純用信息增益有所補償。
e.計算信息增益率
天氣的信息增益率最高,選擇天氣爲分裂屬性。發現分裂了之後,天氣是“陰”的條件下,類別是”純“的,所以把它定義爲葉子節點,選擇不“純”的結點繼續分裂。
在子結點當中重複過程1~5,直到所有的葉子結點足夠"純"。
現在我們來總結一下C4.5的算法流程
while(當前節點"不純"):
1.計算當前節點的類別熵(以類別取值計算)
2.計算當前階段的屬性熵(按照屬性取值嚇得類別取值計算)
3.計算信息增益
4.計算各個屬性的分裂信息度量
5.計算各個屬性的信息增益率
end while
當前階段設置爲葉子節點
1.3 爲什麼使用C4.5要好
1.用信息增益率來選擇屬性
克服了用信息增益來選擇屬性時偏向選擇值多的屬性的不足。
2.採用了一種後剪枝方法
避免樹的高度無節制的增長,避免過度擬合數據
3.對於缺失值的處理
在某些情況下,可供使用的數據可能缺少某些屬性的值。假如〈x,c(x)〉是樣本集S中的一個訓練實例,但是其屬性A的值A(x)未知。
處理缺少屬性值的一種策略是賦給它結點n所對應的訓練實例中該屬性的最常見值;
另外一種更復雜的策略是爲A的每個可能值賦予一個概率。
例如,給定一個布爾屬性A,如果結點n包含6個已知A=1和4個A=0的實例,那麼A(x)=1的概率是0.6,而A(x)=0的概率是0.4。於是,實例x的被分配到A=1的分支,被分配到另一個分支。
C4.5就是使用這種方法處理缺少的屬性值。
2 決策樹的劃分依據三 ----基尼值和基尼指數
2.1 概念
CART 決策樹 [Breiman et al., 1984] 使用"基尼指數" (Gini index)來選擇劃分屬性.
CART 是Classification and Regression Tree的簡稱,這是一種著名的決策樹學習算法,分類和迴歸任務都可用
**基尼值Gini(D):**從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率。故,Gini(D)值越小,數據集D的純度越高。
數據集 D 的純度可用基尼值來度量:
, D爲樣本的所有數量,爲第k類樣本的數量。
基尼指數Gini_index(D):一般,選擇使劃分後基尼係數最小的屬性作爲最優化分屬性。
2.2 案例
請根據下圖列表,按照基尼指數的劃分依據,做出決策樹。
序號 | 是否有房 | 婚姻狀況 | 年收入 | 是否拖欠貸款 |
---|---|---|---|---|
1 | yes | single | 125k | no |
2 | no | married | 100k | no |
3 | no | single | 70k | no |
4 | yes | married | 120k | no |
5 | no | divorced | 95k | yes |
6 | no | married | 60k | no |
7 | yes | divorced | 220k | no |
8 | no | single | 85k | yes |
9 | no | married | 75k | no |
10 | No | Single | 90k | Yes |
1,對數據集非序列標號屬性{是否有房,婚姻狀況,年收入}分別計算它們的Gini指數,取Gini指數最小的屬性作爲決策樹的根節點屬性。
第一次大循環
2,根節點的Gini值爲:
3,當根據是否有房來進行劃分時,Gini指數計算過程爲:
4,若按婚姻狀況屬性來劃分,屬性婚姻狀況有三個可能的取值{married,single,divorced},分別計算劃分後的Gini係數增益。
{married} | {single,divorced}
{single} | {married,divorced}
{divorced} | {single,married}
對比計算結果,根據婚姻狀況屬性來劃分根節點時取Gini指數最小的分組作爲劃分結果,即:
{married} | {single,divorced}
5,同理可得年收入Gini:
對於年收入屬性爲數值型屬性,首先需要對數據按升序排序,然後從小到大依次用相鄰值的中間值作爲分隔將樣本劃分爲兩組。例如當面對年收入爲60和70這兩個值時,我們算得其中間值爲65。以中間值65作爲分割點求出Gini指數。
根據計算知道,三個屬性劃分根節點的指數最小的有兩個:年收入屬性和婚姻狀況,他們的指數都爲0.3。此時,選取首先出現的屬性【married】作爲第一次劃分。
第二次大循環
6,接下來,採用同樣的方法,分別計算剩下屬性,其中根節點的Gini係數爲(此時是否拖欠貸款的各有3個records)
7,對於是否有房屬性,可得:
8,對於年收入屬性則有:
經過如上流程,構建的決策樹,如下圖:
現在我們來總結一下CART的算法流程
while(當前節點"不純"):
1.遍歷每個變量的每一種分割方式,找到最好的分割點
2.分割成兩個節點N1和N2
end while
每個節點足夠“純”爲止
3 小結
3.1 常見決策樹的啓發函數比較
名稱 | 提出時間 | 分支方式 | 備註 |
---|---|---|---|
ID3 | 1975 | 信息增益 | ID3只能對離散屬性的數據集構成決策樹 |
C4.5 | 1993 | 信息增益率 | 優化後解決了ID3分支過程中總喜歡偏向選擇值較多的 屬性 |
CART | 1984 | Gini係數 | 可以進行分類和迴歸,可以處理離散屬性,也可以處理連續屬性 |
3.1.1 ID3 算法
存在的缺點
(1) ID3算法在選擇根節點和各內部節點中的分支屬性時,採用信息增益作爲評價標準。信息增益的缺點是傾向於選擇取值較多的屬性,在有些情況下這類屬性可能不會提供太多有價值的信息.
(2) ID3算法只能對描述屬性爲離散型屬性的數據集構造決策樹。
3.1.2 C4.5算法
做出的改進(爲什麼使用C4.5要好)
(1) 用信息增益率來選擇屬性
(2) 可以處理連續數值型屬性
(3)採用了一種後剪枝方法
(4)對於缺失值的處理
C4.5算法的優缺點
優點:
產生的分類規則易於理解,準確率較高。
缺點:
在構造樹的過程中,需要對數據集進行多次的順序掃描和排序,因而導致算法的低效。
此外,C4.5只適合於能夠駐留於內存的數據集,當訓練集大得無法在內存容納時程序無法運行。
3.1.3 CART算法
CART算法相比C4.5算法的分類方法,採用了簡化的二叉樹模型,同時特徵選擇採用了近似的基尼係數來簡化計算。
C4.5不一定是二叉樹,但CART一定是二叉樹。
3.1.4 多變量決策樹(multi-variate decision tree)
同時,無論是ID3, C4.5還是CART,在做特徵選擇的時候都是選擇最優的一個特徵來做分類決策,但是大多數,**分類決策不應該是由某一個特徵決定的,而是應該由一組特徵決定的。**這樣決策得到的決策樹更加準確。這個決策樹叫做多變量決策樹(multi-variate decision tree)。在選擇最優特徵的時候,多變量決策樹不是選擇某一個最優特徵,而是選擇最優的一個特徵線性組合來做決策。這個算法的代表是OC1,這裏不多介紹。
如果樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習裏面的隨機森林之類的方法解決。
3.2 決策樹變量的兩種類型:
- 數字型(Numeric):變量類型是整數或浮點數,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作爲分割條件(排序後,利用已有的分割情況,可以優化分割算法的時間複雜度)。
- 名稱型(Nominal):類似編程語言中的枚舉類型,變量只能從有限的選項中選取,比如前面例子中的“婚姻情況”,只能是“單身”,“已婚”或“離婚”,使用“=”來分割。
3.3 如何評估分割點的好壞?
如果一個分割點可以將當前的所有節點分爲兩類,使得每一類都很“純”,也就是同一類的記錄較多,那麼就是一個好分割點。
比如上面的例子,“擁有房產”,可以將記錄分成了兩類,“是”的節點全部都可以償還債務,非常“純”;“否”的節點,可以償還貸款和無法償還貸款的人都有,不是很“純”,但是兩個節點加起來的純度之和與原始節點的純度之差最大,所以按照這種方法分割。
構建決策樹採用貪心算法,只考慮當前純度差最大的情況作爲分割點。