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] 博客園
