【十大經典數據挖掘算法】系列php
決策樹(decision tree)算法基於特徵屬性進行分類,其主要的優勢:模型具備可讀性,計算量小,分類速度快。決策樹算法包括了由Quinlan提出的ID3與C4.5,Breiman等提出的CART。其中,C4.5是基於ID3的,對分裂屬性的目標函數作出了改進。html
決策樹是一種經過對特徵屬性的分類對樣本進行分類的樹形結構,包括有向邊與三類節點:node
上圖給出了(二叉)決策樹的示例。決策樹具備如下特色:算法
決策樹學習的本質是從訓練數據集中概括出一組分類規則[2]。但隨着分裂屬性次序的不一樣,所獲得的決策樹也會不一樣。如何獲得一棵決策樹既對訓練數據有較好的擬合,又對未知數據有很好的預測呢?函數
首先,咱們要解決兩個問題:學習
特徵選擇指選擇最大化所定義目標函數的特徵。下面給出以下三種特徵(Gender, Car Type, Customer ID)分裂的例子:測試
圖中有兩類類別(C0, C1),C0: 6
是對C0類別的計數。直觀上,應選擇Car Type特徵進行分裂,由於其類別的分佈機率具備更大的傾斜程度,類別不肯定程度更小。ui
爲了衡量類別分佈機率的傾斜程度,定義決策樹節點\(t\)的不純度(impurity),其知足:不純度越小,則類別的分佈機率越傾斜;下面給出不純度的的三種度量:spa
\begin{equation}
Entropy(t)=-\sum\limits_{k}p(c_k|t)\log p(c_k|t)
\end{equation}code
\begin{equation}
Gini(t)=1-\sum\limits_{k}[p(c_k|t)]^2
\end{equation}
\begin{equation}
Classification error(t)=1-\mathop{\max}\limits_{k} [p(c_k|t)]
\end{equation}
其中,\(p(c_k|t)\)表示對於決策樹節點\(t\)類別\(c_k\)的機率。這三種不純度的度量是等價的,在等機率分佈是達到最大值。
爲了判斷分裂先後節點不純度的變化狀況,目標函數定義爲信息增益(information gain):
\begin{equation}
\Delta = I(parent) - \sum\limits_{i=1}^{n}{N(a_i)\over N}I(a_i)
\end{equation}
\(I(\cdot)\)對應於決策樹節點的不純度,\(parent\)表示分裂前的父節點,\(N\)表示父節點所包含的樣本記錄數,\(a_i\)表示父節點分裂後的某子節點,\(N(a_i)\)爲其計數,\(n\)爲分裂後的子節點數。
特別地,ID3算法選取熵值做爲不純度\(I(\cdot)\)的度量,則
\[ \begin{aligned} \Delta & = H(c)-\sum\limits_{i=1}^{n}{N(a_i)\over N}H(c|a_i) \cr &=H(c)-\sum\limits_{i}^{n} p(a_i)H(c|a_i)\cr & = H(c)-H(c|A) \cr \end{aligned} \]
\(c\)指父節點對應全部樣本記錄的類別;\(A\)表示選擇的特徵屬性,即\(a_i\)的集合。那麼,決策樹學習中的信息增益\(\Delta\)等價於訓練數據集中類與特徵的互信息,表示因爲得知特徵\(A\)的信息訓練數據集\(c\)不肯定性減小的程度。
在特徵分裂後,有些子節點的記錄數可能偏少,以致於影響分類結果。爲了解決這個問題,CART算法提出了只進行特徵的二元分裂,即決策樹是一棵二叉樹;C4.5算法改進分裂目標函數,用信息增益比(information gain ratio)來選擇特徵:
\begin{equation}
Gain ratio = {\Delta \over Entropy(parent)}
\end{equation}
於是,特徵選擇的過程等同於計算每一個特徵的信息增益,選擇最大信息增益的特徵進行分裂。此即回答前面所提出的第一個問題(選擇較優特徵)。ID3算法設定一閾值,當最大信息增益小於閾值時,認爲沒有找到有較優分類能力的特徵,沒有往下繼續分裂的必要。根據最大表決原則,將最多計數的類別做爲此葉子節點。即回答前面所提出的第二個問題(中止分裂條件)。
ID3算法的核心是根據信息增益最大的準則,遞歸地構造決策樹;算法流程以下:
C4.5算法流程與ID3相相似,只不過將信息增益改成信息增益比。
生成的決策樹對訓練數據會有很好的分類效果,卻可能對未知數據的預測不許確,即決策樹模型發生過擬合(overfitting)——訓練偏差(training error)很小、泛化偏差(generalization error,亦可看做爲test error)較大。下圖給出訓練偏差、測試偏差(test error)隨決策樹節點數的變化狀況:
能夠觀察到,當節點數較小時,訓練偏差與測試偏差均較大,即發生了欠擬合(underfitting)。當節點數較大時,訓練偏差較小,測試偏差卻很大,即發生了過擬合。只有當節點數適中是,訓練偏差居中,測試偏差較小;對訓練數據有較好的擬合,同時對未知數據有很好的分類準確率。
發生過擬合的根本緣由是分類模型過於複雜,可能的緣由以下:
爲了解決過擬合,C4.5經過剪枝以減小模型的複雜度。[2]中提出一種簡單剪枝策略,經過極小化決策樹的總體損失函數(loss function)或代價函數(cost function)來實現,決策樹\(T\)的損失函數爲:
\[ L_\alpha (T)=C(T)+\alpha \left| T \right| \]
其中,\(C(T)\)表示決策樹的訓練偏差,\(\alpha\)爲調節參數,\(\left| T \right|\)爲模型的複雜度。當模型越複雜時,訓練的偏差就越小。上述定義的損失正好作了二者之間的權衡。
若是剪枝後損失函數減小了,即說明這是有效剪枝。具體剪枝算法能夠由動態規劃等來實現。
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining. [2] 李航,《統計學習方法》. [3] Naren Ramakrishnan, The Top Ten Algorithms in Data Mining.