決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。其每個非葉節點表示一個特徵屬性上的判定,每個分支代表這個特徵屬性在其值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作爲決策結果。
決策樹的構造過程不依賴領域知識,決策樹的構造就是根據計算公式(信息增益、信息增益比、基尼指數等)來確定優先選擇哪個特徵屬性對訓練數據進行劃分,依次類推,直到葉子節點(葉子節點中的數據都屬於同一個類別)。究竟優先選擇哪個特徵屬性?其評價標準是讓各個分裂子集儘可能地“純”,儘可能“純”就是儘量讓一個分裂子集中待分類項屬於同一類別,而這個任務就交給數學公式——信息增益、信息增益比、基尼指數等來確定!
屬性選擇度量算法有很多,這裏介紹ID3、C4.5和CART三種常用算法。
針對這三個算法:設訓練數據集爲, 表示其樣本容量,即樣本個數。設有K個類,k = 1,2,…,K,||爲屬於類的樣本個數,。設特徵A有n個不同的取值,根據特徵A的取值將D劃分爲n個子集, 爲
的樣本個數, 。記子集 中屬於類 的樣本的集合爲 ,即 , 爲 的樣本個數。
爲了便於說明先給出熵和條件熵的定義。
在信息論與概率統計中,熵(entropy)是表示隨機變量不確定性的度量,設X是一個取有限個值的離散隨機變量,其概率分佈
爲:
則隨機變量X的熵的定義爲(對數以2或是e爲底):
由定義可知,熵只依賴於X的分佈,而與X的取值無關,所以也可以將X的熵記作,即
ID3算法(信息增益)
“信息熵”information entropy是度量樣本集合純度最常用的一種指標,假定當前樣本集合D中第k類樣本所佔比例爲(k=1,2,...,K),則D的信息熵定義爲:
H(D)的值越小,則D的純度越高。
用屬性A對樣本集D進行劃分所獲得的“信息增益”(information gain):
一般而言,信息增益越大,使用屬性A來進行劃分所獲得的“純度提升”越大,所以劃分屬性的選擇爲取值最大的屬性。 (此處A的含義爲所有屬性的代表)
信息增益準則對可取值數目比較多的屬性有所偏好,C4.5對此進行了改進(這樣說準確嗎?)。
C4.5算法(信息增益率)
如果使得每個樣例的編號作爲屬性,每個分支有一個樣本,這些分支結點的純度已達到最大,但是這樣的決策樹不具有泛化能力,無法對新樣本進行有效預測,信息增益準則對可取值數目較多的屬性有所偏好。
著名的C4.5決策樹算法使用“增益率”gain ratio來選擇最優劃分屬性。
但,增益率準則對可取值數目較少的屬性有多偏好,因此,C4.5算法並不是直接選擇增益率最大的候選劃分屬性,而是使用了一個啓發式:先從候選劃分屬性中找出信息增益高於平均水平的屬性,再從中選擇增益率最高的。
CART(基尼係數)——分類決策樹
CART假設決策樹是二叉樹(對於屬性是連續值的屬性,以某兩個取值的中值進行劃分。對於屬性取值爲離散值的屬性,以屬性是否取某個值爲分割方式)。內部節點特徵的取值爲“是”和“否”。
CART決策樹Classification and Regression Tree是一種著名的決策樹學習算法,分類和迴歸都可用,CART決策樹使用“基尼係數(指數)”來選擇劃分屬性。分類問題中,假設有K個類,樣本點屬於k類的概率爲,則概率分佈的基尼指數定義爲
對於給定的樣本集合D,其基尼係數(指數)爲
Gini(D)反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率,因此,Gini(D)越小,則數據集D的純度越高。
如果樣本集合D根據特徵A是否取某一個可能值a被分割成和 兩部分,則在特徵A的條件下,集合D的基尼指數定義爲
我們在候選屬性集合中,選擇使得劃分後基尼指數最小的屬性作爲最優劃分屬性,即
CART(選擇最優切分變量和切分點)——迴歸樹
詳細參見《統計學習方法》p68頁。
例子:
參見《統計機器學習》p59頁表5.1,詳細計算過程參見p64頁和p71頁中間。
離散屬性 | 連續屬性 | |
ID3 | 根據分裂屬性值的個數進行分叉(例如:年齡有:青年、中年、老年) | 選取合適的分裂屬性與分裂點(是否只會被分爲兩部分,>=3可否?對於二分類問題,沒有必要) |
C4.5 | 同上 | 同上 |
CART-分類 | 根據屬性值等於某個值與不等於某個值進行分叉(例如取值爲青年或不是青年,因爲CART爲二叉樹) | 選取合適的分裂屬性與分裂點(二叉樹) |
CART-迴歸 | 同上 | 選取合適的分裂屬性與分裂點(二叉樹) |
剪枝處理
剪枝(pruning)是決策樹學習算法對付“過擬合”的主要手段,決策樹分支過多,以至於把訓練集自身的一些特點當做所有數據都具有的一般性質而導致過擬合,預剪枝(prepruning)和後剪枝(postpruning)是決策樹剪枝的兩種基本策略,預剪枝是指在決策樹生成過程中,對每個結點在劃分前先進行估計,若當前結點的劃分不能帶來決策樹泛化性能提升,則停止劃分並將當前結點標記爲葉結點;後剪枝則是先從訓練集生成一顆完整的決策樹,然後自底向上地對非葉結點進行考察,若將該結點對應的子樹替換爲葉結點能帶來決策樹泛化性能的提升,則將該子樹替換爲葉結點。
判別決策樹泛化性能提升:隨機劃分數據集爲訓練集和驗證集,根據上節中的一些準則選擇屬性劃分,預剪枝根據劃分前後對驗證集預測結果進行評判是否繼續劃分,降低了過擬合的風險,顯著減少了決策樹的訓練時間開銷和測試時間開銷,但有些分支的當前劃分雖不能提升泛化性能、甚至導致下降,但在其基礎上進行後續劃分有可能導致性能顯著提高,預剪枝可能帶來“欠擬合”風險。後剪枝從訓練集生成一顆完整的決策樹,自底向上決定是否剪枝,後剪枝決策樹通常比預剪枝決策樹保留了更多的分支,一般泛化能力優於預剪枝決策樹,欠擬合風險小,但是後剪枝決策樹在生成完全決策樹之後進行,並且要自底向上對樹中所有非葉結點逐一考察,訓練時間開銷比預剪枝和未剪枝都要大很多。
連續與缺失值
連續值屬性一般採用二分法進行處理,對屬性區間尋找中位點進行劃分,確定一個值作爲分裂點split_point,按照>split_point和<=split_point生成兩個分支。分裂點的選擇方法:對於取值爲連續值的屬性,將n個樣本從小到大排列,共有n-1個劃分點。我們就可以像離散屬性值一樣來考察這些劃分點,選擇最優劃分點對樣本集合進行劃分。
與離散屬性不同,若當前結點劃分屬性爲連續屬性,該屬性還可作爲其後代結點的劃分屬性。
缺失值處理需要解決兩個問題:1、如何在屬性值缺失的情況下進行劃分屬性選擇? 2、給定劃分屬性,若樣本在該屬性上的值缺失,如何對樣本進行劃分?詳見《西瓜書》
多變量決策樹
非葉結點不再是僅對某個屬性,而是對屬性的線性組合進行測試,換言之,每個非葉節點是一個線性分類器。
決策樹優點:計算量簡單,可解釋性強,比較適合處理有缺失屬性的樣本,能夠處理不相關的特徵
缺點:容易過擬合,後續出現了隨機森林,減小了過擬合現象
其他
1、如果屬性用完了怎麼辦?——在決策樹構造過程中可能會出現這種情況:所有屬性都作爲分裂屬性用光了,但有的子集還不是純淨集,即集合內的元素不屬於同一類別。在這種情況下,由於沒有更多信息可以使用了,一般對這些子集進行“多數表決”,即使用此子集中出現次數最多的類別作爲此節點類別,然後將此節點作爲葉子節點。
2、上述描述僅僅記錄了大體過程,如果是初學者難免還是不易理解。建議閱讀周志華老師的西瓜書,結合例子很容易理解了。
3、目前只是在原理上有了清晰的認識,在實際使用時,結合源碼再做深入理解更佳。
4、今天看到當初第一遍學習copy過來的blog,真是晦澀難懂,面對琳琅滿目的網絡世界,在完全不懂時對這些信息的甄別能力真是有限。
5、決策樹ID3,C4.5是分類決策樹(分類),其屬性碰到離散值是正常情況,其屬性取值碰到連續值,則去某兩個屬性取值的中值進行劃分。CART分類與迴歸樹,作爲分類樹時,對於屬性是離散值的屬性,由於CART是二叉樹,內部節點的取值爲是或者否,此時,以屬性 “年齡” 爲例(青年、中年、老年),只能以取值爲“青年”和取值不是“青年”進行劃分,對於屬性爲離散值的情況處理方式同上,只是計算方式不同(基尼指數)。CART爲迴歸樹的情況面對上述情形,處理方式相同,只是計算方式不同(最優切分屬性和切分點(j,s))。
6、決策樹這樣以信息增益、信息增益率、基尼指數的方式選擇屬性進行劃分的方式如何統一到損失函數的框架中?
參考
1、周志華老師的《機器學習》
2、https://www.cnblogs.com/yiruparadise/p/5687758.html