【機器學習】決策樹原理

決策樹是一種非參數的監督學習方法,它主要用於分類和迴歸。決策樹的目的是構造一種模型,使之能夠從樣本數據的特徵屬性中,通過學習簡單的決策規則——IF THEN規則,從而預測目標變量的值。在這裏插入圖片描述
例如,在某醫院內,對因心臟病發作而入院治療的患者,在住院的前24小時內,觀測記錄下來他們的19個特徵屬性——血壓、年齡、以及其他17項可以綜合判斷病人狀況的重要指標,用圖1所示的決策樹判斷病人是否屬於高危患者。在圖1中,圓形爲中間節點,也就是樹的分支,它代表IF THEN規則的條件;方形爲終端節點(葉節點),也就是樹的葉,它代表IF THEN規則的結果。我們也把第一個節點稱爲根節點。

決策樹往往採用的是自上而下的設計方法,每迭代循環一次,就會選擇一個特徵屬性進行分叉,直到不能再分叉爲止。因此在構建決策樹的過程中,選擇最佳(既能夠快速分類,又能使決策樹的深度小)的分叉特徵屬性是關鍵所在。這種“最佳性”可以用非純度(impurity)進行衡量。如果一個數據集合中只有一種分類結果,則該集合最純,即一致性好;反之有許多分類,則不純,即一致性不好。有許多指標可以定量的度量這種非純度,最常用的有熵,基尼指數(Gini Index)和分類誤差,它們的公式分別爲:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
上述所有公式中,值越大,表示越不純,這三個度量之間並不存在顯著的差別。式中D表示樣本數據的分類集合,並且該集合共有J種分類,pj表示第j種分類的樣本率:
在這裏插入圖片描述
式中N和Nj分別表示集合D中樣本數據的總數和第j個分類的樣本數量。把式4帶入式2中,得到:
在這裏插入圖片描述
目前常用的決策樹的算法包括ID3(Iterative Dichotomiser 3,第3代迭戈二叉樹)、C4.5和CART(ClassificationAnd Regression Tree,分類和迴歸樹)。前兩種算法主要應用的是基於熵的方法,而第三種應用的是基尼指數的方法。下面我們就逐一介紹這些方法。

ID3是由Ross Quinlan首先提出,它是基於所謂“Occam’srazor”(奧卡姆剃刀),即越簡單越好,也就是越是小型的決策樹越優於大型的決策樹。如前所述,我們已經有了熵作爲衡量樣本集合純度的標準,熵越大,越不純,因此我們希望在分類以後能夠降低熵的大小,使之變純一些。這種分類後熵變小的判定標準可以用信息增益(Information Gain)來衡量,它的定義爲:
在這裏插入圖片描述
該式表示在樣本集合D下特徵屬性A的信息增益,n表示針對特徵屬性A,樣本集合被劃分爲n個不同部分,即A中包含着n個不同的值,Ni表示第i個部分的樣本數量,E(Di)表示特徵屬性A下第i個部分的分類集合的熵。信息增益越大,分類後熵下降得越快,則分類效果越好。因此我們在D內遍歷所有屬性,選擇信息增益最大的那個特徵屬性進行分類。在下次迭代循環中,我們只需對上次分類剩下的樣本集合計算信息增益,如此循環,直至不能再分類爲止。

C4.5算法也是由Quinlan提出,它是ID3算法的擴展。ID3應用的是信息增益的方法,但這種方法存在一個問題,那就是它會更願意選擇那些包括很多種類的特徵屬性,即哪個A中的n多,那麼這個A的信息增益就可能更大。爲此,C4.5使用信息增益率這一準則來衡量非純度,即:
在這裏插入圖片描述
式中,SI(D, A)表示分裂信息值,它的定義爲:
在這裏插入圖片描述
該式中的符號含義與式6相同。同樣的,我們選擇信息增益率最大的那個特徵屬性作爲分類屬性。

CART算法是由Breiman等人首先提出,它包括分類樹和迴歸樹兩種。我們先來討論分類樹,針對特徵屬性A,分類後的基尼指數爲:
在這裏插入圖片描述
該式中的符號含義與式6相同。與ID3和C4.5不同,我們選擇分類基尼指數最小的那個特徵屬性作爲分類屬性。當我們每次只想把樣本集合分爲兩類時,即每個中間節點只產生兩個分支,但如果特徵屬性A中有多於2個的值,即n> 2,這時我們就需要一個閾值β,它把D分割成了D1和D2兩個部分,不同的β得到不同的D1和D2,我們重新設D1的樣本數爲L,D2的樣本數爲R,因此有L+R = N,則式9可簡寫爲:
在這裏插入圖片描述
我們把式5帶入上式中,得到:
在這裏插入圖片描述
式中,∑Lj = L,∑Rj = R。式11只是通過不同特徵屬性A的不同閾值β來得到樣本集D的不純度,由於D內的樣本數量N是一定的,因此對式11求最小值問題就轉換爲求式12的最大值問題:
在這裏插入圖片描述
以上給出的是分類樹的計算方法,下面介紹迴歸樹。兩者的不同之處是,分類樹的樣本輸出(即響應值)是類的形式,如判斷蘑菇是有毒還是無毒,週末去看電影還是不去。而回歸樹的樣本輸出是數值的形式,比如給某人發放房屋貸款的數額就是具體的數值,可以是0到120萬元之間的任意值。爲了得到迴歸樹,我們就需要把適合分類的非純度度量用適合迴歸的非純度度量取代。因此我們將熵計算用均方誤差替代:
在這裏插入圖片描述
式中N表示D集合的樣本數量,yi和ri分別爲第i個樣本的輸出值和預測值。如果我們把樣本的預測值用樣本輸出值的平均來替代,則式13改寫爲
在這裏插入圖片描述
上式表示了集合D的最小均方誤差,如果針對於某種特徵屬性A,我們把集合D劃分爲s個部分,則劃分後的均方誤差爲:
在這裏插入圖片描述
式中Ni表示被劃分的第i個集合Di的樣本數量。式15與式14的差值爲劃分爲s個部分後的誤差減小:
在這裏插入圖片描述
與式6所表示的信息增益相似,我們尋求的是最大化的誤差減小,此時就得到了最佳的s個部分的劃分。

同樣的,當我們僅考慮二叉樹的情況時,即每個中間節點只有兩個分支,此時s= 2,基於特徵屬性A的值,集合D被閾值β劃分爲D1和D2兩個集合,每個集合的樣本數分別爲L和R,則:

在這裏插入圖片描述
把式14帶入上式,得:
在這裏插入圖片描述
式中,yi是屬於集合D的樣本響應值,li和ri分別是屬於集合D1和D2的樣本響應值。對於某個節點來說,它的樣本數量以及樣本響應值的和是一個定值,因此式18的結果完全取決於方括號內的部分,即:
在這裏插入圖片描述
因此求式18的最大值問題就轉變爲求式19的最大值問題。

我們按照樣本響應值是類的形式,還是數值的形式,把決策樹分成了分類樹和迴歸樹,它們對應不同的計算公式。那麼表示特徵屬性的形式也會有這兩種形式,即類的形式和數值的形式,比如決定是否出去踢球,取決於兩個條件:風力和氣溫。風力的表示形式是:無風、小風、中風、大風,氣溫的表示形式就是具體的攝氏度,如-10℃~40℃之間。風力這個特徵屬性就是類的形式,而氣溫就是數值的形式。又比如決定發放房屋貸款,其金額取決於兩個條件:是否有車有房和年薪。有車有房的表示形式是:無車無房、有車無房、無車有房、有車有房,而年薪的表示形式就是具體的錢數,如0~20萬。有車有房這個特徵屬性就是類的形式,年薪就是數值的形式。因此在分析樣本的特徵屬性時,我們要把決策樹分爲四種情況:特徵爲類的分類樹(如決定是否踢球的風力)、特徵爲數值的分類樹(如決定是否踢球的溫度)、特徵爲類的迴歸樹(如發放貸款的有車有房)和特徵爲數值的迴歸樹(如發放貸款的年薪)。由於特徵形式不同,所以計算方法上有所不同:

Ⅰ、特徵爲類的分類樹:對於兩類問題,即樣本的分類(響應值)只有兩種情況:響應值爲0和1,按照特徵屬性的類別的樣本響應值爲1的數量的多少進行排序。例如我們採集20個樣本來構建是否踢球分類樹,設出去踢球的響應值爲1,不踢球的響應值爲0,針對風力這個特徵屬性,響應值爲1的樣本有14個,無風有6個樣本,小風有5個,中風2個,大風1個,則排序的結果爲:大風<中風<小風<無風。然後我們按照這個順序依次按照二叉樹的分叉方式把樣本分爲左分支和右分支,並帶入式12求使該式爲最大值的那個分叉方式,即先把是大風的樣本放入左分支,其餘的放入右分支,帶入式12,得到A,再把大風和中風放入左分支,其餘的放入右分支,帶入式12,得到B,再把大風、中風和小風放入左分支,無風的放入右分支,計算得到C,比較A、B、C,如果最大值爲C,則按照C的分叉方式劃分左右分支,其中閾值β可以設爲3。對於非兩類問題,採用的是聚類的方法。

Ⅱ、特徵爲數值的分類樹:由於特徵屬性是用數值進行表示,我們就按照數值的大小順序依次帶入式12,計算最大值。如一共有14個樣本,按照由小至大的順序爲:abcdefghijklmn,第一次分叉爲:a|bcdefghijklmn,豎線“|”的左側被劃分到左分支,右側被劃分到右分支,帶入式12計算其值,然後第二次分叉:ab|cdefghijklmn,同理帶入式12計算其值,以此類推,得到這13次分叉的最大值,該種分叉方式即爲最佳的分叉方式,其中閾值β爲分叉的次數。

Ⅲ、特徵爲類的迴歸樹:計算每種特徵屬性各個種類的平均樣本響應值,按照該值的大小進行排序,然後依次帶入式19,計算其最大值。

Ⅳ、特徵爲數值的迴歸樹:該種情況與特徵爲數值的分類樹相同,就按照數值的大小順序依次帶入式19,計算最大值。

在訓練決策樹時,還有三個技術問題需要解決。第一個問題是,對於分類樹,我們還需要考慮一種情況,當用戶想要檢測一些非常罕見的異常現象的時候,這是非常難辦到的,這是因爲訓練可能包含了比異常多得多的正常情況,那麼很可能分類結果就是認爲每一個情況都是正常的。爲了避免這種情況的出現,我們需要設置先驗概率,這樣異常情況發生的概率就被人爲的增加(可以增加到0.5甚至更高),這樣被誤分類的異常情況的權重就會變大,決策樹也能夠得到適當的調整。先驗概率需要根據各自情況人爲設置,但還需要考慮各個分類的樣本率,因此這個先驗值還不能直接應用,還需要處理。設Qj爲我們設置的第j個分類的先驗概率,Nj爲該分類的樣本數,則考慮了樣本率並進行歸一化處理的先驗概率qj爲:
在這裏插入圖片描述
把先驗概率帶入式12中,則得到:
在這裏插入圖片描述
第二個需要解決的問題是,某些樣本缺失了某個特徵屬性,但該特徵屬性又是最佳分叉屬性,那麼如何對該樣本進行分叉呢?目前有幾種方法可以解決該問題,一種是直接把該樣本刪除掉;另一種方法是用各種算法估計該樣本的缺失屬性值。還有一種方法就是用另一個特徵屬性來替代最佳分叉屬性,該特徵屬性被稱爲替代分叉屬性。因此在計算最佳分叉屬性的同時,還要計算該特徵屬性的替代分叉屬性,以防止最佳分叉屬性缺失的情況。CART算法就是採用的該方法,下面我們就來介紹該方法。

尋找替代分叉屬性總的原則就是使其分叉的效果與最佳分叉屬性相似,即分叉的誤差最小。我們仍然根據特徵屬性是類還是數值的形式,也把替代分叉屬性的計算分爲兩種情況。

當特徵屬性是類的形式的時候,當最佳分叉屬性不是該特徵屬性時,會把該特徵屬性的每個種類分叉爲不同的分支,例如當最佳分叉屬性不是風力時,極有可能把5個無風的樣本分叉爲不同的分支(如3個屬於左分支,2個屬於右分支),但當最佳分叉屬性是風力時,這種情況就不會發生,也就是5個無風的樣本要麼屬於左分支,要麼屬於右分支。因此我們把被最佳分叉屬性分叉的特徵屬性種類的分支最大樣本數量作爲該種類的分叉值,計算該特徵屬性所有種類的這些分叉值,最終這些分叉值之和就作爲該替代分叉屬性的分叉值。我們還看前面的例子,無風的分叉值爲3,再計算小風、中風、大風的分叉值,假如它們的值分別爲4、4、3,則把風力作爲替代分叉屬性的分叉值爲14。按照該方法再計算其他特徵屬性是類形式的替代分叉值,則替代性由替代分叉值按從大到小進行排序。在用替代分叉屬性分叉時那些左分支大於右分支樣本數的種類被分叉爲左分支,反之爲右分支,如上面的例子,無風的樣本被分叉爲左分支。

當特徵屬性是數值的形式的時候,樣本被分割成了四個部分:LL、LR、RL和RR,前一個字母表示被最佳分叉屬性分叉爲左右分支,後一個字母表示被替代分叉屬性分叉爲左右分支,如LR表示被最佳分叉屬性分叉爲左分支,但被替代分叉屬性分叉爲右分支的樣本,因此LL和RR表示的是被替代分叉屬性分叉正確的樣本,而LR和RL是被替代分叉屬性分叉錯誤的樣本,在該特徵屬性下,選取閾值對樣本進行分割,使LL+RR或LR+RL達到最大值,則最終max{LL+RR,LR+RL}作爲該特徵屬性的替代分叉屬性的分叉值。按照該方法再計算其他特徵屬性是數值形式的替代分叉值,則替代性也由替代分叉值按從大到小進行排序。最終我們選取替代分叉值最大的那個特徵屬性作爲該最佳分叉屬性的替代分叉屬性。

爲了讓替代分叉屬性與最佳分叉屬性相比較,我們還需要對替代分叉值進行規範化處理,如果替代分叉屬性是類的形式,則替代分叉值需要乘以式12再除以最佳分叉屬性中的種類數量,如果替代分叉屬性是數值的形式,則替代分叉值需要乘以式19再除以所有樣本的數量。規範化後的替代分叉屬性如果就是最佳分叉屬性時,兩者的值是相等的。

第三個問題就是過擬合。由於決策樹的建立完全是依賴於訓練樣本,因此該決策樹對該樣本能夠產生完全一致的擬合效果。但這樣的決策樹對於預測樣本來說過於複雜,對預測樣本的分類效果也不夠精確。這種現象就稱爲過擬合。

將複雜的決策樹進行簡化的過程稱爲剪枝,它的目的是去掉一些節點,包括葉節點和中間節點。剪枝常用的方法有預剪枝和後剪枝兩種。預剪枝是在構建決策樹的過程中,提前終止決策樹的生長,從而避免過多的節點的產生。該方法雖然簡單但實用性不強,因爲我們很難精確的判斷何時終止樹的生長。後剪枝就是在決策樹構建完後再去掉一些節點。常見後剪枝方法有四種:悲觀錯誤剪枝(PEP)、最小錯誤剪枝(MEP)、代價複雜度剪枝(CCP)和基於錯誤的剪枝(EBP)。CCP算法能夠應用於CART算法中,它的本質是度量每減少一個葉節點所得到的平均錯誤,在這裏我們重點介紹CCP算法。

CCP算法會產生一系列樹的序列{T0,T1,…,Tm},其中T0是由訓練得到的最初的決策樹,而Tm只含有一個根節點。序列中的樹是嵌套的,也就是序列中的Ti+1是由Ti通過剪枝得到的,即實現用Ti+1中一個葉節點來替代Ti中以該節點爲根的子樹。這種被替代的原則就是使誤差的增加率α最小,即
在這裏插入圖片描述
式中,R(n)表示Ti中節點n的預測誤差,R(nt)表示Ti中以節點n爲根節點的子樹的所有葉節點的預測誤差之和,|nt|爲該子樹葉節點的數量,|nt|也被稱爲複雜度,因爲葉節點越多,複雜性當然就越強。因此α的含義就是用一個節點n來替代以n爲根節點的所有|nt|個節點的誤差增加的規範化程度。在Ti中,我們選擇最小的α值的節點進行替代,最終得到Ti+1。以此類推,每需要得到一棵決策樹,都需要計算其前一棵決策樹的α值,根據α值來對前一棵決策樹進行剪枝,直到最終剪枝到只剩下含有一個根節點的Tm爲止。

根據決策樹是分類樹還是迴歸樹,節點的預測誤差的計算也分爲兩種情況。在分類樹下,我們可以應用上面介紹過的式1~式3中的任意一個,如果我們應用式3來表示節點n的預測誤差,則:
在這裏插入圖片描述
式中,Nj表示節點n下第j個分類的樣本數,N爲該節點的所有樣本數,max{Nj}表示在m個分類中,擁有樣本數最多的那個分類的樣本數量。在迴歸樹下,我們可以應用式14來表示節點n的預測誤差:
在這裏插入圖片描述
式中,yi表示第i個樣本的響應值,N爲該節點的樣本數量。我們把式23和式24的分子部分稱爲節點的風險值。

我們用全部樣本得到的決策樹序列爲{T0,T1,…,Tm},其所對應的α值爲α0<α1<…<αm。下一步就是如何從這個序列中最優的選擇一顆決策樹Ti。而與其說找到最優的Ti,不如說找到其所對應的αi。這一步驟通常採用的方法是交叉驗證(Cross-Validation)。

我們把L個樣本隨機劃分爲數量相等的V個子集Lv,v=1,…,V。第v個訓練樣本集爲:
在這裏插入圖片描述
則Lv被用來做L(v)的測試樣本集。對每個訓練樣本集L(v)按照CCP算法得到決策樹的序列{T0(v),T1(v),…,Tm(v) },其對應的α值爲α0(v)<α1(v)<…<αm(v)。α值的計算仍然採用式22。對於分類樹來說,第v個子集的節點n的預測誤差爲:
在這裏插入圖片描述
式中,Nj(v)表示訓練樣本集L(v)中節點n的第j個分類的樣本數,N(v)爲L(v)中節點n的所有樣本數,max{Nj(v)}表示在m個分類中,L(v)中節點n擁有樣本數最多的那個分類的樣本數量。對於迴歸樹來說,第v個子集的節點n的預測誤差爲:
在這裏插入圖片描述
式中,yj(v)表示訓練樣本集L(v)中節點n的第i個樣本的響應值。我們仍然把式26和式27的分子部分稱交叉驗證子集中的節點風險值。

我們由訓練樣本集得到了樹序列,然後應用這些樹對測試樣本集進行測試,測試的結果用錯誤率來衡量,即被錯誤分類的樣本數量。對於分類樹來說,節點n的錯誤率爲:
在這裏插入圖片描述
式中,Nv表示測試樣本集Lv中節點n的所有樣本數,Nv,j表示Lv中第j個分類的樣本數,這個j是式26中max{|Lj(v)|}所對應的j。對於迴歸樹來說,節點n的錯誤率爲:
在這裏插入圖片描述
式中,yv,i表示Lv的第i個樣本響應值。決策樹的總錯誤率E(v)等於該樹所有葉節點的錯誤率之和。

雖然交叉驗證子集決策樹序列T(v)的數量要與由全體樣本得到的決策樹序列T的數量相同,但兩者構建的形式不同,它需要比較兩者的α值後再來構建。而爲了比較由全體樣本訓練得到α值與交叉驗證子集的α(v)值之間的大小,我們還需要對α值進行處理,即
在這裏插入圖片描述
其中α’0 = 0,而α’m爲無窮大。

我們設按照式22得到的初始訓練子集L(v)決策樹序列爲{T0(v),T1(v),…,Tm(v)},其所對應的α(v)值爲{α0(v), α1(v),…, αm(v)}。最終的樹序列也是由這些T(v)組成,並且也是嵌套的形式,但可以重複,而且必須滿足:
在這裏插入圖片描述
該式的含義是T(v)中第k個子樹的α(v)值要小於α’k的最大的α(v)所對應的子樹,因此最終的樹序列有可能是這種形式:T0(v),T0(v),T1(v),T1(v),T2(v),T2(v),T2(v),T2(v),…,直到序列中樹的數量爲m爲止。

子集的決策樹序列構建好了,下面我們就可以計算V個子集中樹序列相同的總錯誤率之和,即
在這裏插入圖片描述
則最佳的子樹索引J爲:
在這裏插入圖片描述
最終我們選擇決策樹序列{T0,T1,…,Tm}中第J棵樹爲最佳決策樹,該樹的總錯誤率最小。

如果我們在選擇決策樹時使用1-SE(1 Standard Error of Minimum Error)規則的話,那麼有可能最終的決策樹不是錯誤率最小的子樹,而是錯誤率略大,但樹的結構更簡單的那顆決策樹。我們首先計算誤差範圍SE:
在這裏插入圖片描述
式中,EJ表示最佳子樹的總錯誤率,N爲總的樣本數。則最終被選中的決策樹的總錯誤率EK要滿足:
在這裏插入圖片描述
並且決策樹的結構最簡單。

以上我們完整並詳細的介紹了構建決策樹,也就是訓練決策樹的過程,在這個過程中我們沒有放過每個技術細節。而預測樣本很簡單,只要把樣本按照最佳分叉屬性(或替代分叉屬性)一次一次分叉,直到到達決策樹的葉節點,該葉節點的值就是該預測樣本的響應值。

參考
感謝博主趙春江的博文:Decision Trees

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章