【十大經典數據挖掘算法】系列
1. 前言
分類與回歸樹(Classification and Regression Trees, CART)是由四人幫Leo Breiman, Jerome Friedman, Richard Olshen與Charles Stone於1984年提出,既可用於分類也可用於回歸。本文將主要介紹用於分類的CART。CART被稱為數據挖掘領域內里程碑式的算法。
不同於C4.5,CART本質是對特征空間進行二元划分(即CART生成的決策樹是一棵二叉樹),並能夠對標量屬性(nominal attribute)與連續屬性(continuous attribute)進行分裂。
2. CART生成
前一篇提到過決策樹生成涉及到兩個問題:如何選擇最優特征屬性進行分裂,以及停止分裂的條件是什么。
特征選擇
CART對特征屬性進行二元分裂。特別地,當特征屬性為標量或連續時,可選擇如下方式分裂:
An instance goes left if CONDITION, and goes right otherwise
即樣本記錄滿足CONDITION則分裂給左子樹,否則則分裂給右子樹。
標量屬性
進行分裂的CONDITION可置為不等於屬性的某值
;比如,標量屬性Car Type
取值空間為{Sports, Family, Luxury}
,二元分裂與多路分裂如下:
連續屬性
CONDITION可置為不大於\(\varepsilon\);比如,連續屬性Annual Income
,\(\varepsilon\)取屬性相鄰值的平均值,其二元分裂結果如下:
接下來,需要解決的問題:應該選擇哪種特征屬性及定義CONDITION,才能分類效果比較好。CART采用Gini指數來度量分裂時的不純度,之所以采用Gini指數,是因為較於熵而言其計算速度更快一些。對決策樹的節點\(t\),Gini指數計算公式如下:
\begin{equation}
Gini(t)=1-\sum\limits_{k}[p(c_k|t)]^2
\end{equation}
Gini指數即為\(1\)與類別\(c_k\)的概率平方之和的差值,反映了樣本集合的不確定性程度。Gini指數越大,樣本集合的不確定性程度越高。分類學習過程的本質是樣本不確定性程度的減少(即熵減過程),故應選擇最小Gini指數的特征分裂。父節點對應的樣本集合為\(D\),CART選擇特征\(A\)分裂為兩個子節點,對應集合為\(D_L\)與\(D_R\);分裂后的Gini指數定義如下:
\begin{equation}
G(D,A)={\left|{D_L} \right| \over \left|{D} \right|}Gini(D_L)+{\left|{D_R} \right| \over \left|{D} \right|}Gini(D_R)
\end{equation}
其中,\(\left| \cdot \right|\)表示樣本集合的記錄數量。如上圖中的表格所示,當Annual Income的分裂值取87時,則Gini指數計算如下:
CART算法
CART算法流程與C4.5算法相類似:
- 若滿足停止分裂條件(樣本個數小於預定閾值,或Gini指數小於預定閾值(樣本基本屬於同一類,或沒有特征可供分裂),則停止分裂;
- 否則,選擇最小Gini指數進行分裂;
- 遞歸執行1-2步驟,直至停止分裂。
3. CART剪枝
CART剪枝與C4.5的剪枝策略相似,均以極小化整體損失函數實現。同理,定義決策樹\(T\)的損失函數為:
\begin{equation}
L_\alpha (T)=C(T)+\alpha \left| T \right|
\end{equation}
其中,\(C(T)\)表示決策樹的訓練誤差,\(\alpha\)為調節參數,\(\left| T \right|\)為模型的復雜度。
CART算法采用遞歸的方法進行剪枝,具體辦法:
- 將\(\alpha\)遞增\(0={\alpha}_0<{\alpha}_1<{\alpha}_2<\cdots<{\alpha}_n\),計算得到對應於區間\([\alpha_{i},{\alpha}_{i+1})\)的最優子樹為\(T_i\);
- 從最優子樹序列\(\lbrace T_1,T_2,\cdots,T_n \rbrace\)選出最優的(即損失函數最小的)。
如何計算最優子樹為\(T_i\)呢?首先,定義以\(t\)為單節點的損失函數為
以\(t\)為根節點的子樹\(T_t\)的損失函數為
令\(L_\alpha (t)=L_\alpha (T_t)\),則得到
此時,單節點\(t\)與子樹\(T_t\)有相同的損失函數,而單節點\(t\)的模型復雜度更小,故更為可取;同時也說明對節點\(t\)的剪枝為有效剪枝。由此,定義對節點\(t\)的剪枝后整體損失函數減少程度為
剪枝流程如下:
- 對輸入決策樹\(T_0\),自上而下計算內部節點的\(g(t)\);選擇最小的\(g(t)\)作為\({\alpha}_1\),並進行剪枝得到樹\(T_1\),其為區間\([{\alpha}_1,{\alpha}_2)\)對應的最優子樹。
- 對樹\(T_1\),再次自上而下計算內部節點的\(g(t)\);……\(\alpha _2\)……\(T_2\)……
- 如此遞歸地得到最優子樹序列,采用交叉驗證選取最優子樹。
關於CART剪枝算法的具體描述請參看[1],其中關於剪枝算法的描述有誤:
(6)如果T不是由根節點單獨構成的樹,則回到步驟(4)
應改為回到步驟(3)
,要不然所有\(\alpha\)均一樣了。
-----------------------------------------------Update ------------------------------------------------------
李航老師已經在勘誤表給出修改了。
4. 參考資料
[1] 李航,《統計學習方法》.
[2] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.
[3] Dan Steinberg, The Top Ten Algorithms in Data Mining.