【十大經典數據挖掘算法】CART


【十大經典數據挖掘算法】系列

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. PageRank
  7. AdaBoost
  8. kNN
  9. Naïve Bayes
  10. CART

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指數計算如下:

\[\frac{4}{10} \left[ 1- (\frac{1}{4})^2- (\frac{3}{4})^2 \right] + \frac{6}{10} \left[ 1- (\frac{2}{6})^2- (\frac{4}{6})^2 \right] = 0.417 \]

CART算法

CART算法流程與C4.5算法相類似:

  1. 若滿足停止分裂條件(樣本個數小於預定閾值,或Gini指數小於預定閾值(樣本基本屬於同一類,或沒有特征可供分裂),則停止分裂;
  2. 否則,選擇最小Gini指數進行分裂;
  3. 遞歸執行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\)為單節點的損失函數為

\[L_\alpha (t)=C(t)+\alpha \]

\(t\)為根節點的子樹\(T_t\)的損失函數為

\[L_\alpha (T_t)=C(T_t)+\alpha \left| T_t \right| \]

\(L_\alpha (t)=L_\alpha (T_t)\),則得到

\[\alpha = {C(t)-C(T_t) \over \left| T_t \right|-1} \]

此時,單節點\(t\)與子樹\(T_t\)有相同的損失函數,而單節點\(t\)的模型復雜度更小,故更為可取;同時也說明對節點\(t\)的剪枝為有效剪枝。由此,定義對節點\(t\)的剪枝后整體損失函數減少程度為

\[g(t) = {C(t)-C(T_t) \over \left| T_t \right|-1} \]

剪枝流程如下:

  • 對輸入決策樹\(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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM