机器学习笔记(四)决策树
4.決策樹
4.1基本流程
決策樹(decisiontree)基于樹結構進行決策,符合人的思維機制,是一類常見的機器學習方法。一般的,一棵決策樹包含一個根結點、若干個內部結點和若干個葉結點。葉結點就對應于決策結果;內部結點則對應屬性值分類,每個內部結點包含的樣本集合根據屬性測試的結果(值)劃分到子結點中;根結點包含樣本全集,從根結點到每個葉結點的路徑對應一個判定測試序列。決策樹學習的目的是為了產生一棵泛化能力強,可判定未見示例分類結果的決策樹,其基本流程遵循簡單而直觀的分而治之策略。
決策樹學習的基本算法描述如下:
輸入:訓練集D={(x1,y1),(x2,y2),…(xm,ym)}
????? 屬性集A={a1,a2,…,ad}
過程:函數TreeGenerate(D,A)
????? 1)生成結點node;
????? 2)if D中的樣本全屬于同一類別C then
?????????? 將node標記為C類葉節點; return
???????? end if
????? 3)if A=? or D中樣本在A上取值相同 then
?????????? 將node標記為葉結點,其類別標記為D中樣本數最多的類;return
???????? end if
????? 4)從A中選擇最優劃分屬性a*;
????? 5)for a*中的每一個值 a* v do
???????????? 為node生成一個分支;令Dv表示D中在a*上取值為a* v 的樣本子集;
???????????? if Dv為空then
?????????????? 將分支結點標記為葉結點,其類別標記為D中樣本數最多的類;return
???????????? else
?????????????? 以TreeGenerate(Dv,A-{ a*})為分支結點
???????????? end if
????????? end for
??? 輸出:以node為根結點的一棵決策樹。
決策樹生成是一個遞歸過程,有三種情形會導致遞歸終止:1)當前結點包含的樣本全屬于同一類別,無需劃分;2)當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分;3)當前結點包含的樣本集為空,不能劃分。
第2種情形下,把當前結點標記為葉結點,并將其類別設定為該結點所含樣本最多的類別;在第3種情形下,也是把當前結點標記為葉結點,不過將其類別設定為父結點所含樣本最多的類別。二者的區別在于,第2中情形利用當前結點的后驗分布;而第3種情形則把父結點的樣本分布作為當前結點的先驗分布。
4.2劃分選擇
前文的決策樹生成算法中第4步從A中選擇最優劃分屬性a*是重點,要如何選擇才能做到最優呢?隨著劃分過程的深入,希望決策樹的分支結點所包含的樣本盡可能屬于同一類別,即結點的純度(purity)越來越高。用結點的純度來衡量屬性劃分的最優選擇,用信息熵(informationentropy)這一指標來度量樣本集合純度。
一般來說,信息增益越大,使用屬性a進行劃分所獲得的純度提升越大,如此,用信息增益大小作為決策樹劃分屬性的選擇。在決策樹生成算法上,選擇屬性a*=arg max Gain(D,a)作為劃分依據。
配合文中的西瓜集例子可以很好理解這個信息增益計算。考慮一種特殊情況,就是屬性a的值v恰好有m個值(和D樣本集數量一樣),就是說每個樣本在屬性a上都有不同的值,共有m個值,這個分支將產生m個,每個分支結點只包含一個樣本,其純度是最大,選擇a作為屬性劃分依據顯然是理所當然。但是這樣的劃分所生成的決策樹,不具備泛化能力,無法對新樣本進行有效預測。從這個特殊的屬性例子上來說,信息增益準則對屬性取值數目較多的屬性有所偏好,為減少這種偏好可能帶來的不利影響,不直接使用信息增益,而使用增益率來選擇最優劃分屬性。
在候選屬性集合a中,選擇劃分后基尼指數最小的屬性作為最優劃分屬性,即
a*=arg minGain_index(D,a)。
從劃分選擇的指標選擇上看,算法在考量特殊情況下,為避免各種偏好帶來的不利影響,需優化,優化過程就需要數學定義。
4.3剪枝處理
為解決決策樹學習算法帶來的過擬合,需剪枝(pruning)。在決策樹學習中,為了盡可能正確分類訓練樣本,結點劃分過程將不斷重復,有時會造成決策樹分支過多,這時就可能因為訓練樣本學得太好了,以至于把訓練集自身的一些特點當作所有數據集都具有的一般性質而導致過擬合,如此,可通過主動去掉一些分支來降低過擬合的風險。回顧下,過擬合就是把訓練集的特點(個性)當作所有數據集的特點(共性)。
決策樹剪枝的基本策略有預剪枝(pre-pruning)和后剪枝(post-pruning)。預剪枝是指在決策樹生成過程中,對每個結點在劃分前進行估計,若當前結點的劃分不能帶來決策樹泛化性能提升,則停止劃分并將當前結點標記為葉結點;后剪枝則是先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化性能提升,則將該子樹替換為葉結點。預剪枝就是在生成過程中就判斷泛化性能來剪枝,后剪枝則是在生成樹后來判斷泛化性能來剪枝。
要看泛化性能是否提升,重心就落在了泛化性能的評估上。泛化性能評估上,采用留出法,即預留一部分數據作為驗證集以進行性能評估。
1)預剪枝
預剪枝的基本過程是:1)劃分訓練集和驗證集;2)基于信息增益準則,應用訓練集選擇最優劃分屬性來生成分支;3)對分支的劃分前后用驗證集分別計算精度;4)如果有提升,則劃分,無提升則禁止劃分。
通過預剪枝剪去決策樹不少分支,避免過擬合,減少決策樹訓練時間開銷和測試時間開銷。但是,被剪去的分支,雖然當前分支不能提升泛化性能,但有可能其后續劃分可以顯著提高。預剪枝這種基于貪心策略的算法,給預剪枝決策樹帶來了欠擬合的風險。回顧欠擬合概念,就是數據集的特點(共性)沒有從訓練集的特點(個性)中訓練出來。
2)后剪枝
后剪枝先從訓練集上生成一棵完整的決策樹,然后用驗證集對內部結點計算精度來剪枝。后剪枝決策樹通常比預剪枝決策樹保留更多分支。一般情形下,后剪枝決策樹的欠擬合風險很小,泛化性能往往優于預剪枝決策樹。但后剪枝過程是在生成完全決策樹之后進行的,并且要自底向上地對樹中的所有非葉結點進行逐一考察,因此其訓練時間開銷比未剪枝決策樹和預剪枝決策樹要大得多。
4.4連續與缺失值
1)連續值
對于基于離散屬性生成的決策樹,信息增益準則作為劃分屬性的最優選擇,對于可取值數目可分支;但如果屬性值是連續性的,屬性可取值數目不再有限,分支怎么劃分呢?這個時候,連續屬性離散化技術可以用上,最簡單策略就是采用二分法(bi-partition)對連續屬性進行處理。
2)缺失值
現實任務中常會遇到不完整樣本,即樣本的某些屬性值缺失,尤其在屬性數目較多的情況下,往往會有大量樣本出現缺失值。如果簡單放棄不完整樣本,僅使用無缺失值的樣本進行學習,顯然對數據信息是極大的浪費,因此需要考慮利用有缺失屬性值的訓練樣例來進行學習。
存在缺失值情況生成決策樹,需要解決兩個問題:1)如何在屬性值缺失的情況下進行劃分屬性選擇?2)給定劃分屬性,若樣本在該屬性上的值缺失,如何對樣本進行劃分?
?
4.5多變量決策樹
若把每個屬性視為坐標空間中的一個坐標軸,則d個屬性描述的樣本對應了d維空間中的一個數據點,對樣本分類則意味著在這個坐標空間中尋找不同類樣本之間的分類邊界。決策樹所形成的分類邊界有一個明顯的特點:軸平行(axis-parallel),即它的分類邊界由若干個與坐標軸平行的分段組成。
分類邊界的每一段都是與坐標軸平行的,這樣的分類邊界使得學習結果有較好的可解釋性,因為每一段劃分都直接對應了某個屬性取值。但在學習任務的真實分類邊界比較復雜時,必須使用很多段劃分才能獲得較好的近似,此時決策樹會相當復雜,由于要進行大量的屬性測試,預測時間開銷會很大。若使用斜的劃分邊界,則決策樹模型將大為簡化。
與傳統的單變量決策樹(univariate decision tree)不同,在多變量決策樹的學習過程中,不是為每個非葉結點尋找一個最優劃分屬性,而是試圖建立一個合適的線性分類器。
文中的圖示比較清晰的展示上文描述。本來很難理解多變量決策樹在本章中的意義,后來想到最優劃分屬性選擇上的貪心策略時,才意識到,泛化性能好的學習算法應該是分類邊界定義很好的。從這點來看,多變量決策樹,就是在最優劃分屬性選擇之上的進一步優化,通過對非葉結點的屬性線性組合找到更好的邊界。抽象之于數學,如之。
總結
以上是生活随笔為你收集整理的机器学习笔记(四)决策树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现海明距离简单计算
- 下一篇: 机器学习知识点(七)决策树学习算法Jav