決策樹(Decision Tree)
0 通俗的理解
對於一個根據特徵向量來對樣本進行分類的問題,首先挑出一個最有價值的特徵,對該特徵進行提問,如樣本顏色是什麼;然後根據得到的不同回答,如紅色、藍色等,將資料集劃分成子集,對每個子集重複上述操作,也就是說總是在剩下的特徵集合裡面找一個對最終分類任務最有用的特徵,根據不同的取值再劃分成更小的子集,知道最終子集內的樣本都屬於或者幾乎屬於同一類,那麼此時我們就認為模型已經訓練好。 (提問即決策規則,把提問保留來劃分子集 ‘依據’)
決策樹也是用來處理有監督的分類問題。它處理的資料的特徵往往也是類別變數,而不是連續值。(SVM、邏輯斯蒂迴歸、線性迴歸都預設做分類預測的樣本的特徵向量是連續值)
當然,決策樹也是可以處理連續變數的分類的。通常決策樹適合處理特徵向量中類別變數比較多的任務,以及對模型的可解釋性要求較高的任務。
1 模型思路與演算法流程
(1)模型思路
選擇特徵(選擇順序有策略,先對重要特徵提問,再慢慢偏向細節),提問過程組成了一棵樹的結構。
決策樹模型不但能預測出類別,還能告訴使用者它是根據哪些特徵、如何判斷,猜得到最終預測結果的。
(2)基本流程
a. 輸入訓練集S;
b. 若S中的所有樣本為同一類別,標記為該類別,return;
c. 若S中的所有樣本各個特徵均相同,標記為數目最多的類別,return;
d. 待劃分集合M初始化為S,初始化根節點root;
重複以下操作:
在所有特徵中找到最優的特徵α*,根據α*的不同取值將M劃分成不同的子集,記為U1,U2,U3,...,併產生一個劃分節點node。
對於每個子集Un的處理方式如下:
①如果無法劃分,以最多類別作為預測類別,成為樹的一個葉子,return;
②如果無須劃分,將該子集樣本類別作為預測類別,成為樹的一個葉子,return;
③如果不是以上兩種情況,則把該子集作為待劃分集合M,成為上次劃分的節點的孩子節點,重複步驟d。
注:①和②其實是兩種停止條件,無須劃分是說自己內的所有樣本已經是同一類別了,沒必要劃分了;無法劃分是指子集內的樣本特徵都是一樣的,但是類別不同,同樣無法繼續劃分。
e. 待全部劃分結束,可得一棵以root為根節點的決策樹。
(3)決策樹模型的關鍵問題——特徵的優選
在遍歷所有的特徵時,需要根據以該特徵劃分得到子集的純度為這些特徵打分,從而選取最優特徵,那麼,這個分數該如何計算呢???
計算該特徵的分數就是計算劃分後子集的純度。即該特徵劃分以後,子集的純度比未劃分時增加了多少,增加的多,說明該特徵更有用,所以應該給分高一些;反之,說明基於該特徵的劃分作用不大,應該給分低一些。
(自己的理解:純度就是某一特徵中類別的分佈,某一類所佔比重明顯大的話,說明樣本集比較純)
2 特徵選擇原則
(1)資訊增益原則(Information Gain Criteria)
定義:用資訊量的變化來度量按照某個特徵劃分後,自己的純度的增加程度。
資訊量即一個事件包含的資訊的量。在資訊理論中,通常用資訊熵(熵,Entropy)對隨機事件的資訊進行度量。資訊熵表示一個隨機事件的不確定程度,即混亂程度。其數學公式為:
$H(X) = -\sum _{i=1}^{k}p_{i}logp_{i}$
其中,X是一個隨機事件,總共有k種可能的情況,每種情況發生的概率分別為p1,p2,...,pk。
在決策樹特徵選擇與節點分裂時,將該節點上包含的訓練集樣本的類別看成一個隨機事件,通過統計各類別的比例,代替上面各類別的比例,代替上面各種情況中的概率,就可以計算出某個節點的資訊熵。
資訊增益:指的是按照某個特徵將節點分裂後,相對於分裂前的節點,分裂後的各個子節點的加權平均資訊熵減少了多少。即通過某個特徵的輔助,對於樣本集類別的認知的不確定性消除了多少。
資訊增益的數學形式:
$InfoGain(X,F) = H(X) - \sum _{i}\frac{X_{i}}{X}H(X_{i})$
其中,X為劃分前的資料集,F為用來劃分的特徵,Xi為劃分後每個集合的資料集。
(2)資訊增益比原則
定義:資訊增益與特徵本身的資訊熵的比值。
資訊增益原則有缺陷,即其傾向於情況更多的特徵。但多數情況下,這種特徵過於細緻,不能真正表達特徵與類別的關係,容易過擬合。
這種特徵有一個共同點,即本身的取值比較多,也就是特徵本身的資訊熵較大。因此,通過改進,得到資訊增益比原則。數學形式如下:
$InfoGainRatio(X,F) = InfoGain(X,F) / H(F)$
(3)基尼係數原則
基尼係數依舊是用來度量集合中樣本類別純度的方法。數學含義是:在一個集合中任意取出兩個樣本,其不屬於同一類的概率。
基尼係數的計算公式:
$Gini(S) = 1 - \sum _{i}p_{i}^{2}$
其中,pi為取到的樣本為第i類的概率。
集合越“純”,即類別越單一,取到同一樣本的概率就越大,基尼係數越小。所以,我們更加傾向於選擇分裂之後基尼係數的加權和最小的劃分方式。作為決策樹特徵選擇的基尼係數公式為:
$GiniInd(N,a) = \sum _{i=1}^{k}\frac{|N_{i}|}{|N|}Gini(N_{i})$
其中,N為節點分裂前的集合;Ni為分割成的子集合;a為用來分裂的特徵。最終的目標特徵式為:
$a^{*} = arg min GiniInd(N,a)$
3 剪枝策略
剪枝是防止決策樹模型過擬合的策略之一。於決策樹而言,模型的複雜度是分支的多少。剪枝操作就是將無益於模型泛化能力提高的節點分支“剪掉”。
丟擲一個問題。如何判斷有益還是無益?答案是 基於驗證集的檢驗來判斷是否剪枝的。
剪枝的具體操作如下:
對於一個節點來說,如果分裂後比分裂前在驗證機上表現得更好,那麼就允許這個節點分裂,形成“樹枝”;反之,如果一個節點在分裂後反而在驗證集上的表現更差了,那麼就不希望這個節點分裂,就需要把已經分裂的“樹枝”進行“剪枝”,避免模型的泛化能力下降。
剪枝分為預剪枝和後剪枝。
預剪枝:選擇特徵分裂節點過程中,如果判斷一個節點需要剪枝,那麼就直接不對該節點進行分裂。(缺點,可能錯失更優解)
後剪枝:先分裂,得到一棵完整的決策樹後,再考察每個節點,對需要剪枝的節點進行剪枝處理。(缺點,計算量大很多)
4 常用決策樹模型
(1)ID3演算法
ID指的是Iterative Dichotomister ,即迭代二分法。
①如果集合(節點)無法劃分或無須劃分,則返回該節點。其中,無法劃分的用樣本數最多的類別表示該節點預測類別,無須劃分的用樣本的類別表示該節點預測類別,否則轉入步驟②。
②計算現有集合(節點)的資訊熵。對於所有的特徵,分別計算以其為劃分標準所得的子集的資訊熵(各個子集加權平均),選擇能使資訊增益最大的特徵。
③如果資訊增益大於設定的闞值,那麼選擇該特徵分裂節點,並轉入步驟④,否則返回該節點。
④對於分裂得到的各個子集(子節點),重複步驟①-③。
(2)C4.5演算法(ID3的改進)
①如果集合(節點)無法劃分或無須劃分,則返回該節點。其中,無法劃分的用樣本數最多的類別表示該節點預測類別,無須劃分的用樣本的類別表示該節點預測類別,否則轉入步驟②。
②計算現有集合(節點)的資訊熵。對於所有的特徵,分別計算以其為劃分標準所得的子集的資訊熵(各個子集加權平均)及特徵本身的資訊熵,選擇能使資訊增益比最大的特徵。
③如果資訊增益大於設定的闞值,那麼選擇該特徵分裂節點,並轉入步驟④,否則返回該節點。
④對於分裂得到的各個子集(子節點),重複步驟①-③。
5 多變數決策樹
基本思想:在每個節點都用多個特徵共同參與決策。
具體實現:在每個節點用一個線性分類器代替單一屬性的閾值。