樹算法系列之一:CART迴歸樹

0.前言

在深度神經網絡崛起之前,基於樹類的算法是表現比較優異,非線性性能比較好的一大類算法,深受廣大人民羣衆的喜愛。比如常見的基於樹的算法有隨機森林(Random Forest),GBDT, XGboost, LightGBM等。而所有的這些算法,都是基於決策樹(Decision Tree)進化而來的。因此瞭解熟悉決策樹是我們學習算法過程中一個必不可少的環節。

決策樹可以分爲分類樹與迴歸樹。迴歸樹一般只能處理連續型數據,而分類樹則即可以處理連續型數據又可以處理離散型數據。

1.什麼是CART樹

CART樹的全名叫做Classification and Regression Tree。從名字可以看出來,CART樹即可以用來做分類又可以用來做迴歸。

CART樹構建分類樹與迴歸樹的時候,主要有如下兩點差異(其實也是分類樹與迴歸樹的差異):
1.連續值的處理。
CART分類樹對連續值採取的是計算Gini係數大小來衡量特徵劃分點的好壞。
GINI(D)=i=1kpk(1pk)=1i=1kpk2GINI*(D) = \sum_{i=1}^k p_k * (1 - p_k) = 1 - \sum_{i=1}^k p_k ^ 2

基尼指數的意義是從數據集D中隨機抽取兩個樣本類別標識不一致的概率。基尼指數越小,數據集的純度越高。分類決策樹遞歸創建過程中就是每次選擇GiniGain最小的節點做分叉點。
迴歸樹的處理方式爲,對於任意的特徵J,選擇任意的劃分點s將數據集分成R1, R2,然後使得R1與R2的均方差和最小。

2.預測方式
分類樹的預測方式爲看葉子節點中概率最大的類作爲當前預測類。
迴歸樹一般是輸出葉子節點的均值作爲預測結果。

2.CART迴歸樹的流程

對於決策樹的生成過程,就是遞歸構建二叉樹的過程。以CART迴歸樹爲例,我們來看看具體怎麼構建。
假設X與Y分別爲輸入輸出,Y是連續變量。
D={(x1,y1),(x2,y2),...,(xn,yn))}D = \{ (x_1, y_1), (x_2, y_2), ..., (x_n, y_n)) \}
最終我們想生成CART迴歸樹f(x)f(x)。即在訓練集上,遞歸地將每個區域分爲兩個子區域並決定每個子區域的輸出值,來構建二叉決策樹。

1.選擇最優切分變量j與切分點s,並求解

minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]\min _ { j , s } \left[ \min _ { c _ { 1 } } \sum _ { x _ { i } \in R _ { 1 } ( j , s ) } \left( y _ { i } - c _ { 1 } \right) ^ { 2 } + \min _ { c _ { 2 } } \sum _ { x _ { i } \in R _ { 2 } ( j , s ) } \left( y _ { i } - c _ { 2 } \right) ^ { 2 } \right]

遍歷變量j,對固定的切分變量j掃描切分點s,選擇最優的(j,s)。

2.用選定的(j,s),劃分區域,並決定相應的輸出
c^m=average(yixiRm(j,s))\hat{c}_{m}=average(y_{i}|x_{i} \in R_{m}(j,s))

3.對兩個子區域重複1,2步驟,直到滿足終止條件
4.將輸入的空間劃分爲M個區域,R1,R2,...,RMR_1, R_2, ..., R_M,在每個單元上有固定的輸出cmc_m,最終生成決策樹
f(x)=m=1McmI,XRmf(x) = \sum_{m=1} ^M c_mI, X \in R_m

3.剪枝

決策樹很容易出現的一種情況是過擬合(overfitting),所以需要進行剪枝。而基本的策略包括兩種:預剪枝(Pre-Pruning)與後剪枝(Post-Pruning)。

預剪枝:其中的核心思想就是,在每一次實際對結點進行進一步劃分之前,先採用驗證集的數據來驗證如果劃分是否能提高劃分的準確性。如果不能,就把結點標記爲葉結點並退出進一步劃分;如果可以就繼續遞歸生成節點。
後剪枝:後剪枝則是先從訓練集生成一顆完整的決策樹,然後自底向上地對非葉結點進行考察,若將該結點對應的子樹替換爲葉結點能帶來泛化性能提升,則將該子樹替換爲葉結點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章