CART分類樹算法
特徵選擇
我們知道,在ID3算法中我們使用了信息增益來選擇特徵,信息增益大的優先選擇。在C4.5算法中,採用了信息增益比來選擇特徵,以減少信息增益容易選擇特徵值多的特徵的問題。但是無論是ID3還是C4.5,都是基於信息論的熵模型的,這裏面會涉及大量的對數運算。能不能簡化模型同時也不至於完全丟失熵模型的優點呢?有!CART分類樹算法使用基尼係數 \(^{[ 1 ]}\)來代替信息增益比,基尼係數代表了模型的不純度,基尼係數越小,則不純度越低,特徵越好。這和信息增益(比)是相反的。
連續特徵和離散值處理
對於CART分類樹連續值的處理問題,其思想和C4.5是相同的,都是將連續的特徵離散化。唯一的區別在於在選擇劃分點時的度量方式不同,C4.5使用的是信息增益比,則CART分類樹使用的是基尼係數。
比如 \(m\) 個樣本的連續特徵 \(A\) 有 \(m\) 個,從小到大排列爲\(a_1,a_2,...,a_m\),則CART取相鄰兩樣本值的平均數,一共取得 \(m-1\) 個劃分點,其中第 \(i\) 個劃分點 \(T_i\) 表示爲:\(T_i= \frac{a_i+a_{i+1}}{2}\) 。對於這 \(m-1\) 個點,分別計算以該點作爲二元分類點時的基尼係數。選擇基尼係數最小的點作爲該連續特徵的二元離散分類點。比如取到的基尼係數最小的點爲 \(a_t\) ,則小於 \(a_t\) 的值爲類別 \(1\),大於 \(a_t\) 的值爲類別 \(2\),這樣我們就做到了連續特徵的離散化。要注意的是,與ID3或者C4.5處理離散屬性不同的是,如果當前節點爲連續屬性,則該屬性後面還可以參與子節點的產生選擇過程。
對於CART分類樹離散值的處理問題,採用的思路是不停的二分離散特徵。
回憶下ID3或者C4.5,如果某個特徵A被選取建立決策樹節點,如果它有\(A1,A2,A3\)三種類別,我們會在決策樹上一下建立一個三叉的節點。這樣導致決策樹是多叉樹。但是CART分類樹使用的方法不同,他採用的是不停的二分,還是這個例子,CART分類樹會考慮把 \(A\) 分成\(\{{A1}\}\)和\(\{{A2,A3}\},\{{A2}\}\)和\(\{{A1,A3\}}, \{{A3}\}和\)\(\{{A1,A2}\}\)三種情況,找到基尼係數最小的組合。
建立CART分類樹
算法輸入是訓練集\(D\),基尼係數的閾值,樣本個數閾值。
輸出是決策樹T。
我們的算法從根節點開始,用訓練集遞歸的建立CART樹。
- 對於當前節點的數據集爲 \(D\),如果樣本個數小於閾值或者沒有特徵,則返回決策子樹,當前節點停止遞歸。
- 計算樣本集\(D\)的基尼係數,如果基尼係數小於閾值,則返回決策樹子樹,當前節點停止遞歸。
- 計算當前節點現有的各個特徵的各個特徵值對數據集D的基尼係數,對於離散值和連續值的處理方法和基尼係數的計算見第二節。缺失值的處理方法和上篇的C4.5算法裏描述的相同。
- 在計算出來的各個特徵的各個特徵值對數據集\(D\)的基尼係數中,選擇基尼係數最小的特徵A和對應的特徵值\(a\)。根據這個最優特徵和最優特徵值,把數據集劃分成兩部分\(D_1\)和\(D_2\),同時建立當前節點的左右節點,做節點的數據集\(D\)爲\(D_1\),右節點的數據集\(D\)爲\(D_2\).
- 對左右的子節點遞歸的調用1-4步,生成決策樹。
對於生成的決策樹做預測的時候,假如測試集裏的樣本A落到了某個葉子節點,而節點裏有多個訓練樣本。則對於A的類別預測採用的是這個葉子節點裏概率最大的類別。
建立CART迴歸樹
CART迴歸樹和CART分類樹的建立算法大部分是類似的,所以這裏我們只討論CART迴歸樹和CART分類樹的建立算法不同的地方。
首先,我們要明白,什麼是迴歸樹,什麼是分類樹。兩者的區別在於樣本輸出,如果樣本輸出是離散值,那麼這是一顆分類樹。如果果樣本輸出是連續值,那麼那麼這是一顆迴歸樹。
除了概念的不同,CART迴歸樹和CART分類樹的建立和預測的區別主要有下面兩點:
- 連續值的處理方法不同
- 決策樹建立後做預測的方式不同。
對於連續值的處理,我們知道CART分類樹採用的是用基尼係數的大小來度量特徵的各個劃分點的優劣情況。這比較適合分類模型,但是對於迴歸模型,我們使用了常見的和方差的度量方式,CART迴歸樹的度量目標是,對於任意劃分特徵 \(A\),對應的任意劃分點 \(s\) 兩邊劃分成的數據集 \(D_1\)和 \(D_2\),求出使 \(D_1\) 和 \(D_2\) 各自集合的均方差最小,同時 \(D_1\) 和 \(D_2\) 的均方差之和最小所對應的特徵和特徵值劃分點。表達式爲:
其中,\(c_1\) 爲 \(D_1\) 數據集的樣本輸出均值,\(c_2\) 爲 \(D_2\) 數據集的樣本輸出均值。
對於決策樹建立後做預測的方式,上面講到了CART分類樹採用葉子節點裏概率最大的類別作爲當前節點的預測類別。而回歸樹輸出不是類別,它採用的是用最終葉子的均值或者中位數來預測輸出結果。
除了上面提到了以外,CART迴歸樹和CART分類樹的建立算法和預測沒有什麼區別。
[1] 基尼係數 :數據集 \(D\) 的純度可以用基尼值來度量,
其中, \(p(x_i)\) 是分類 \(x_i\) 出現的概率, \(n\) 是分類的數目。\(Gini(D)\) 反映從數據集 \(D\) 中隨機抽取兩個樣本,其類別標記不一致的概率。因此,\(Gini(D)\) 越小,則數據集 \(D\) 的純度越高。
果是二類分類問題,計算就更加簡單了,如果屬於第一個樣本輸出的概率是 \(p\),則基尼係數的表達式爲:
對於個給定的樣本 \(D\) ,假設有 \(K\) 個類別, 第 \(k\) 個類別的數量爲 \(C_k\),則樣本$ D$ 的基尼係數表達式爲:
特別的,對於樣本 \(D\),如果根據特徵 \(A\) 的某個值 \(a\) ,把 \(D\) 分成$ D_1$和 \(D_2\)兩部分,則在特徵 \(A\) 的條件下,$ D$ 的基尼係數表達式爲:
大家可以比較下基尼係數表達式和熵模型的表達式,二次運算是不是比對數簡單很多?尤其是二類分類的計算,更加簡單。但是簡單歸簡單,和熵模型的度量方式比,基尼係數對應的誤差有多大呢?對於二類分類,基尼係數和熵之半的曲線如下:
參考資料
[1] Yolanda. 決策樹算法--CART分類樹算法 [EB/OL] 知乎
[2] 劉建平.決策樹算法原理(下) [EB/OL] 博客園