之前泛泛看了下了Random Forest和決策樹,現在落實到一個具體決策樹算法:CART(Classification and Regression Tree)。
CART是1984年由Breiman, Friedman, Olshen, Stone提出的一個決策樹算法,雖然不是第一個機器學習領域的決策樹,但卻是第一個有着復雜的統計學和概率論理論保證的決策樹(這些話太學術了,引自參考文獻[2])。
CART是一個二叉決策樹,亦即決策樹的每個內部節點(決策節點)最多有兩個分支。因為之前有博文介紹過ID3和C4.5算法,所以這里只從確定最佳分裂屬性和剪枝兩方面介紹CART。
1. 確定最佳分裂屬性(和最佳分裂點)
我們這里只考慮連續值的情況。對於每個輸入屬性的每個可能的分裂點(分裂點即相鄰兩個連續值的中點),我們計算每個划分Gini指標:,然后對該分裂點的兩個划分的Gini指標求加權和。我們選取Gini指標最小的那個輸入屬性的分裂點進行划分。
按照以上規則生成一個完全增長的決策樹,不需要任何停止條件。
2. 剪枝
因為上一步生成的決策樹是沒有停止條件的,所以這個決策樹可能會非常大,對訓練數據很可能會過度擬合,所以需要對決策樹進行后剪枝。
CART算法采用的是Cost-Complexy剪枝:
我們用來衡量一棵子樹的代價復雜度。其中R(T)代表將這個子樹替換為葉子節點后所帶來的誤差的增加,number-of-leaves為子樹T的葉子節點的個數,α不是一個常數,而是一個從0開始增大到無窮大的數。對於決策樹T,我們在α不是一個常數,而是一個從0開始增大到無窮大的數。逐步增加的過程中,每次選擇使Rα最小的子樹,並將之替換為一個葉子節點,對替換后的樹迭代執行以上步驟。
上述過程可能略顯復雜,我們可以用另外一個等價的剪枝方法來得到相同的結果:Weakest-Link-Pruning:
(1)對於所有的子樹STi,我們試圖用合適的葉子節點來代替STi,然后計算增加的誤差E與STi的葉子節點的比值。我們選擇比值最小的那個子樹STj,用合適的葉子節點代替之。
(2)重復迭代以上步驟,每次都替換掉一棵子樹。我們會得到從完全增長的樹T0到只有根節點一個決策節點的樹Tn的一系列決策樹:T0,T1,.....Tn。然后我們用獨立的驗證集(我們可以從可用數據集中抽取三分之一作為驗證集,剩下的三分之二作為訓練集)來驗證各個決策樹的分類准確性。選取准確性最高的決策樹為最終的CART決策樹。
參考文獻:
[1] CART算法學習及實現
[2] 機器學習十大算法:CART
[3] Complexity-Based Evaluation Of Rule-Based Expert Systems