決策樹--CART

CART( Classification And Regression Tree)也叫決策迴歸樹

1,既可以用於處理分類任務也可以用來處理迴歸問題,

2,CART一定是二叉樹

3,分類任務時GINI值作爲分類的依據,在處理迴歸問題時以最小方差作爲節點分類的依據

4,通常用作GBDT和一些集成學習框架的基分類器

CART生成

CART假設決策樹是二叉樹,內部結點特徵的取值爲“是”和“否”,左分支是取值爲“是”的分支,右分支是取值爲“否”的分支。這樣的決策樹等價於遞歸地二分每個特徵,將輸入空間即特徵空間劃分爲有限個單元,並在這些單元上確定預測的概率分佈,也就是在輸入給定的條件下輸出的條件概率分佈。

CART算法由以下兩步組成:

  1. 決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要儘量大;
  2. 決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時損失函數最小作爲剪枝的標準。

CART決策樹的生成就是遞歸地構建二叉決策樹的過程。CART決策樹既可以用於分類也可以用於迴歸。本文我們僅討論用於分類的CART。對分類樹而言,CART用Gini係數最小化準則來進行特徵選擇,生成二叉樹。 CART生成算法如下:

輸入:訓練數據集DD,停止計算的條件:
輸出:CART決策樹。

根據訓練數據集,從根結點開始,遞歸地對每個結點進行以下操作,構建二叉決策樹:

  1. 設結點的訓練數據集爲DD中,選擇Gini係數最小的特徵及其對應的切分點作爲最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去。
  2. 對兩個子結點遞歸地調用步驟l~2,直至滿足停止條件。
  3. 生成CART決策樹。

算法停止計算的條件是結點中的樣本個數小於預定閾值,或樣本集的Gini係數小於預定閾值(樣本基本屬於同一類),或者沒有更多特徵。


一個具體的例子

下面來看一個具體的例子。我們使用《數據挖掘十大算法之決策樹詳解(1)》中圖4-6所示的數據集來作爲示例,爲了便於後面的敘述,我們將其再列出如下:



首先對數據集非類標號屬性{是否有房,婚姻狀況,年收入}分別計算它們的Gini係數增益,取Gini係數增益值最大的屬性作爲決策樹的根節點屬性。根節點的Gini係數

Gini()=1(310)2(710)2=0.42Gini(是否拖欠貸款)=1−(310)2−(710)2=0.42

若按婚姻狀況屬性來劃分,屬性婚姻狀況有三個可能的取值{married,single,divorced},分別計算劃分後的

  • {married} | {single,divorced}
  • {single} | {married,divorced}
  • {divorced} | {single,married}

的Gini係數增益。
當分組爲{married} | {single,divorced}時,SlSl
對比計算結果,根據婚姻狀況屬性來劃分根節點時取Gini係數增益最大的分組作爲劃分結果,也就是{married} | {single,divorced}。

最後考慮年收入屬性,我們發現它是一個連續的數值類型。我們在前面的文章裏已經專門介紹過如何應對這種類型的數據劃分了。對此還不是很清楚的朋友可以參考之前的文章,這裏不再贅述。

對於年收入屬性爲數值型屬性,首先需要對數據按升序排序,然後從小到大依次用相鄰值的中間值作爲分隔將樣本劃分爲兩組。例如當面對年收入爲60和70這兩個值時,我們算得其中間值爲65。倘若以中間值65作爲分割點。SlSl
其他值的計算同理可得,我們不再逐一給出計算過程,僅列出結果如下(最終我們取其中使得增益最大化的那個二分準則來作爲構建二叉樹的準則):




注意,這與我們之前在《數據挖掘十大算法之決策樹詳解(1)》中得到的結果是一致的。最大化增益等價於最小化子女結點的不純性度量(Gini係數)的加權平均值,之前的表裏我們列出的是Gini係數的加權平均值,現在的表裏給出的是Gini係數增益。現在我們希望最大化Gini係數的增益。根據計算知道,三個屬性劃分根節點的增益最大的有兩個:年收入屬性和婚姻狀況,他們的增益都爲0.12。此時,選取首先出現的屬性作爲第一次劃分。

接下來,採用同樣的方法,分別計算剩下屬性,其中根節點的Gini係數爲(此時是否拖欠貸款的各有3個records)

Gini()=1(36)2(36)2=0.5Gini(是否拖欠貸款)=1−(36)2−(36)2=0.5

對於年收入屬性則有:



最後我們構建的CART如下圖所示:



最後我們總結一下,CART和C4.5的主要區別:

  • C4.5採用信息增益率來作爲分支特徵的選擇標準,而CART則採用Gini係數;
  • C4.5不一定是二叉樹,但CART一定是二叉樹。

關於過擬合以及剪枝

決策樹很容易發生過擬合,也就是由於對train數據集適應得太好,反而在test數據集上表現得不好。這個時候我們要麼是通過閾值控制終止條件避免樹形結構分支過細,要麼就是通過對已經形成的決策樹進行剪枝來避免過擬合。另外一個克服過擬合的手段就是基於Bootstrap的思想建立隨機森林(Random Forest)。關於剪枝的內容可以參考文獻【2】以瞭解更多,如果有機會我也可能在後續的文章裏討論它。


參考:[數據挖掘十大算法](https://blog.csdn.net/baimafujinji/article/details/53269040)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章