一文詳解,分類和迴歸樹算法背後原理。碼字不易,喜歡請點贊,謝謝!!!
一、前言
分類和迴歸樹(Classification And Regression Trees),簡稱CART,是1984年提出來的既可用於分類,又可用於迴歸的樹。CART被稱爲數據挖掘領域內里程碑式的算法。
上一節介紹了決策樹的ID3和C4.5算法,後面說到了C4.5算法存在幾點不足,主要爲,生成多叉樹;容易過擬合;只能用於分類;特徵選擇採用熵模型計算量大。而CART針對C4.5算法的這幾點不足都提出了改進。本文將會一一介紹。
二、CART特徵選擇方法
CART算法包括分類樹和迴歸樹,其中分類樹和迴歸樹的特徵選擇採用的是不同的方法,這裏依次介紹。
- CART分類樹特徵選擇
在ID3中,採用信息增益來選擇特徵;在C4.5中,採用信息增益率來選擇特徵;而在CART的分類樹中,則是採用基尼係數來選擇特徵。這是因爲,信息論中的熵模型,存在大量的對數運算,而基尼係數在簡化熵模型的計算的同時保留了熵模型的優點。
- 基尼係數
基尼係數代表模型的純度,基尼係數越大,模型越不純;基尼係數越小,模型越純。因此在特徵選擇時,選擇基尼係數小的來構建決策樹,這和信息增益(率)是相反的。
基尼係數表達式:
式中表示分類問題有個類別,第個類別的概率爲。
如果是二分類,公式將更簡單,假設第一類的概率爲,則基尼係數表達式爲:
對於個給定的樣本,假設有個類別, 第個類別的數量爲,則樣本的基尼係數表達式爲:
特別的,對於樣本,如果根據特徵的某個值,把分成和兩部分,則在特徵的條件下,的基尼係數表達式爲:
- 從熵模型到基尼係數
到這裏你可能還不明白爲什麼可以使用基尼係數來替代熵,推導如下:
從上面推導可以得知,通過泰勒展開,可以將基尼係數近似的等價於熵模型。下圖展示了基尼係數和熵模型之間的差距,可以看出,基尼係數和熵之半的曲線非常接近,僅僅在45度角附近誤差稍大。因此,基尼係數可以做爲熵模型的一個近似替代。
- CART迴歸樹特徵選擇
上面說了CART的分類樹採用基尼係數來選取特徵,而CART的迴歸樹對於離散型特徵也是採用基尼係數,而對於連續性特徵,則採用均方差。對於任意劃分特徵,對應的任意劃分點兩邊劃分成的數據集和,求出使和各自集合的均方差最小,同時和的均方差之和最小所對應的特徵和特徵值劃分點。表達式爲:
另外,爲了簡化算法,CART的分類和迴歸均採用二叉樹,而不是多叉樹,這樣一可以進一步簡化基尼係數和均方差的計算,二可以建立一個更加優雅的二叉樹模型。
三、CART連續型和離散型數據處理方法
- 離散型數據
回憶下ID3或者C4.5,如果某個特徵A被選取建立決策樹節點,如果它有A1,A2,A3三種類別,我們會在決策樹上一下建立一個三叉的節點。這樣導致決策樹是多叉樹。但是CART使用的方法不同,他採用的是不停的二分,還是這個例子,CART會考慮把A分成{A1}和{A2,A3}{A1}和{A2,A3}, {A2}和{A1,A3}{A2}和{A1,A3}, {A3}和{A1,A2}{A3}和{A1,A2}三種情況,找到基尼係數最小的組合,比如{A2}和{A1,A3}{A2}和{A1,A3},然後建立二叉樹節點,一個節點是A2對應的樣本,另一個節點是{A1,A3}對應的節點。同時,由於這次沒有把特徵A的取值完全分開,後面我們還有機會在子節點繼續選擇到特徵A來劃分A1和A3。這和ID3或者C4.5不同,在ID3或者C4.5的一棵子樹中,離散特徵只會參與一次節點的建立。 - 連續型數據
對於CART連續值的處理問題,其思想和C4.5是相同的,都是將連續的特徵離散化。唯一的區別在於在選擇劃分點時的度量方式不同,C4.5使用的是信息增益比,則CART使用的是基尼係數或均方差。
具體思路,如果m個樣本的特徵A是連續型特徵,將其值從小到大排列,然後取相鄰樣本的平均數,得到m-1個劃分點,其中第個劃分點。對於這m-1個劃分點,分別計算其作爲二元分類時候的基尼係數(分類)或均方差(迴歸),然後取到最小的點,則小於的值爲類別1,大於的值爲類別2,這樣我們就做到了連續特徵的離散化。要注意的是,與ID3或者C4.5處理離散屬性不同的是,如果當前節點爲連續屬性,則該屬性後面還可以參與子節點的產生選擇過程。
四、CART步驟
CART的步驟包括,構造樹,然後進行剪枝操作(後面會講到),然後進行預測。對於構造樹部分,分類樹和迴歸樹步驟是一樣的,只是連續型特徵選擇準則不同,因此這裏步驟放在一起。
- 輸入:訓練集D,基尼係數(均方差)閾值,樣本個數閾值
- 輸出:決策樹T
- 構建樹步驟:從根節點開始,採用遞歸的方法構建CART樹
- 對於當前節點的數據集爲D,如果樣本個數小於閾值或者沒有特徵,則返回決策子樹,當前節點停止遞歸;
- 計算樣本集D的基尼係數(均方差),如果基尼係數(均方差)小於閾值,則返回決策樹子樹,當前節點停止遞歸;
- 計算當前節點現有的各個特徵的各個特徵值對數據集D的基尼係數(均方差);
- 在計算出來的各個特徵的各個特徵值對數據集D的基尼係數(均方差)中,選擇基尼係數(均方差)最小的特徵A和對應的特徵值a。根據這個最優特徵和最優特徵值,把數據集劃分成兩部分D1和D2,同時建立當前節點的左右節點,左節點的數據集D爲D1,右節點的數據集D爲D2。
- 預測:如果樣本輸出是離散值,那麼這是一顆分類樹。如果果樣本輸出是連續值,那麼那麼這是一顆迴歸樹。
分類樹預測:採用葉子節點裏概率最大的類別作爲當前節點的預測類別;
迴歸樹預測:採用的是用最終葉子的均值或者中位數來預測輸出結果。
五、CART剪枝
剪枝是決策樹非常重要的一步,因爲決策樹經常出現過擬合的情況,CART迴歸樹和CART分類樹的剪枝策略除了在度量損失的時候一個使用均方差,一個使用基尼係數,算法基本完全一樣,這裏我們一起來講。
剪枝的目的是爲了增加決策樹的泛化能力。
剪枝方法:前剪枝(邊建樹邊剪枝);後剪枝(建完樹之後剪枝)。
對於CART來說,一般採用後剪枝,即先生成決策樹,然後產生所有可能的剪枝後的CART樹,然後使用交叉驗證來檢驗各種剪枝的效果,選擇泛化能力最好的剪枝策略。
CART剪枝的步驟可以理解爲下圖,如果剪枝後的損失函數小於剪枝前損失函數,則進行剪枝操作。
六、CART小結
注:本文主要參考劉建平老師關於CART的總結!!!
參考文獻:
https://www.cnblogs.com/pinard/p/6053344.html
李航 《統計學習方法》
https://www.bilibili.com/video/av54649502
https://blog.csdn.net/lanchunhui/article/details/65441891
https://www.cnblogs.com/zhangchaoyang/articles/2709922.html