决策树算法
一 ? 決策樹的一般表示
二 信息增益法
?
ID3決策樹算法使用信息增益作為準則劃分屬性
?
?
?
算法的過程為:
1)初始化信息增益的閾值??
2)判斷樣本是否為同一類輸出DiDi,如果是則返回單節點樹T。標記類別為DiDi
3) 判斷特征是否為空,如果是則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別。
4)計算A中的各個特征(一共n個)對輸出D的信息增益,選擇信息增益最大的特征AgAg
5) 如果AgAg的信息增益小于閾值??,則返回單節點樹T,標記類別為樣本中輸出類別D實例數最多的類別。
6)否則,按特征AgAg的不同取值AgiAgi將對應的樣本輸出D分成不同的類別DiDi。每個類別產生一個子節點。對應特征值為AgiAgi。返回增加了節點的數T。
7)對于所有的子節點,令D=Di,A=A?{Ag}D=Di,A=A?{Ag}遞歸調用2-6步,得到子樹TiTi并返回。
ID3算法值得改進的地方。
a)ID3沒有考慮連續特征,比如長度,密度都是連續值,無法在ID3運用。這大大限制了ID3的用途。
b)ID3采用信息增益大的特征優先建立決策樹的節點。很快就被人發現,在相同條件下,取值比較多的特征比取值少的特征信息增益大。比如一個變量有2個值,各為1/2,另一個變量為3個值,各為1/3,其實他們都是完全不確定的變量,但是取3個值的比取2個值的信息增益大。如果校正這個問題呢?
c) ID3算法對于缺失值的情況沒有做考慮
d) 沒有考慮過擬合的問題
?
三 增益率
?
信息增益對屬性值較多的屬性具有偏好,例如增加一個id編號作為屬性,1000個樣本對應1000個id,每個ip只有唯一的一個樣本。明顯無法達到泛化目的,且毫無意義。
?
C4.5決策樹算法:先從候選屬性中找出信息增益高于平均水平的屬性,然后選擇增益率最高的
對ID3的優化:
對于連續特征 ? C4.5的思路是將連續的特征離散化。比如m個樣本的連續特征A有m個,從小到大排列為a1,a2,...,ama1,a2,...,am,則C4.5取相鄰兩樣本值的平均數,一共取得m-1個劃分點,其中第i個劃分點Ti表示Ti表示為:Ti=ai+ai+12Ti=ai+ai+12。對于這m-1個點,分別計算以該點作為二元分類點時的信息增益。選擇信息增益最大的點作為該連續特征的二元離散分類點。比如取到的增益最大的點為atat,則小于atat的值為類別1,大于atat的值為類別2,這樣我們就做到了連續特征的離散化。要注意的是,與離散屬性不同的是,如果當前節點為連續屬性,則該屬性后面還可以參與子節點的產生選擇過程。
缺失值問題 ? 主要需要解決的是兩個問題,一是在樣本某些特征缺失的情況下選擇劃分的屬性,二是選定了劃分屬性,對于在該屬性上缺失特征的樣本的處理?
對于第一個子問題,對于某一個有缺失特征值的特征A。C4.5的思路是將數據分成兩部分,對每個樣本設置一個權重(初始可以都為1),然后劃分數據,一部分是有特征值A的數據D1,另一部分是沒有特征A的數據D2. 然后對于沒有缺失特征A的數據集D1來和對應的A特征的各個特征值一起計算加權重后的信息增益比,最后乘上一個系數,這個系數是無特征A缺失的樣本加權后所占加權總樣本的比例。
對于第二個子問題,可以將缺失特征的樣本同時劃分入所有的子節點,不過將該樣本的權重按各個子節點樣本的數量比例來分配。比如缺失特征A的樣本a之前權重為1,特征A有3個特征值A1,A2,A3。 3個特征值對應的無缺失A特征的樣本個數為2,3,4.則a同時劃分入A1,A2,A3。對應權重調節為2/9,3/9, 4/9。
缺點:
模型是用較為復雜的熵來度量
使用了相對較為復雜的多叉樹
只能處理分類不能處理回歸等
?
?
四 基尼指數
?
CART決策樹算法使用此法,只用構建二叉樹,計算只有2次項
CART分類樹算法對于連續特征和離散特征處理的改進
對于CART分類樹連續值的處理問題,其思想和C4.5是相同的,都是將連續的特征離散化。唯一的區別在于在選擇劃分點時的度量方式不同,C4.5使用的是信息增益比,則CART分類樹使用的是基尼系數。
具體的思路如下,比如m個樣本的連續特征A有m個,從小到大排列為a1,a2,...,ama1,a2,...,am,則CART算法取相鄰兩樣本值的平均數,一共取得m-1個劃分點,其中第i個劃分點Ti表示Ti表示為:Ti=ai+ai+12Ti=ai+ai+12。對于這m-1個點,分別計算以該點作為二元分類點時的基尼系數。選擇基尼系數最小的點作為該連續特征的二元離散分類點。比如取到的基尼系數最小的點為atat,則小于atat的值為類別1,大于atat的值為類別2,這樣我們就做到了連續特征的離散化。要注意的是,與ID3或者C4.5處理離散屬性不同的是,如果當前節點為連續屬性,則該屬性后面還可以參與子節點的產生選擇過程。
對于CART分類樹離散值的處理問題,采用的思路是不停的二分離散特征。
回憶下ID3或者C4.5,如果某個特征A被選取建立決策樹節點,如果它有A1,A2,A3三種類別,我們會在決策樹上一下建立一個三叉的節點。這樣導致決策樹是多叉樹。但是CART分類樹使用的方法不同,他采用的是不停的二分,還是這個例子,CART分類樹會考慮把A分成{A1}和{A2,A3}{A1}和{A2,A3},?{A2}和{A1,A3}{A2}和{A1,A3},?{A3}和{A1,A2}{A3}和{A1,A2}三種情況,找到基尼系數最小的組合,比如{A2}和{A1,A3}{A2}和{A1,A3},然后建立二叉樹節點,一個節點是A2對應的樣本,另一個節點是{A1,A3}對應的節點。同時,由于這次沒有把特征A的取值完全分開,后面我們還有機會在子節點繼續選擇到特征A來劃分A1和A3。這和ID3或者C4.5不同,在ID3或者C4.5的一棵子樹中,離散特征只會參與一次節點的建立。
算法一般步驟:
算法輸入是訓練集D,基尼系數的閾值,樣本個數閾值。
輸出是決策樹T。
我們的算法從根節點開始,用訓練集遞歸的建立CART樹。
1) 對于當前節點的數據集為D,如果樣本個數小于閾值或者沒有特征,則返回決策子樹,當前節點停止遞歸。
2) 計算樣本集D的基尼系數,如果基尼系數小于閾值,則返回決策樹子樹,當前節點停止遞歸。
3) 計算當前節點現有的各個特征的各個特征值對數據集D的基尼系數,對于離散值和連續值的處理方法和基尼系數的計算見第二節。缺失值的處理方法和C4.5算法里描述的相同。
4) 在計算出來的各個特征的各個特征值對數據集D的基尼系數中,選擇基尼系數最小的特征A和對應的特征值a。根據這個最優特征和最優特征值,把數據集劃分成兩部分D1和D2,同時建立當前節點的左右節點,做節點的數據集D為D1,右節點的數據集D為D2.
5) 對左右的子節點遞歸的調用1-4步,生成決策樹。
?
五 優缺點:
首先我們看看決策樹算法的優點:
1)簡單直觀,生成的決策樹很直觀。
2)基本不需要預處理,不需要提前歸一化,處理缺失值。
3)使用決策樹預測的代價是O(log2m)O(log2m)。 m為樣本數。
4)既可以處理離散值也可以處理連續值。很多算法只是專注于離散值或者連續值。
5)可以處理多維度輸出的分類問題。
6)相比于神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋
7)可以交叉驗證的剪枝來選擇模型,從而提高泛化能力。
8) 對于異常點的容錯能力好,健壯性高。
我們再看看決策樹算法的缺點:
1)決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進。
2)決策樹會因為樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。
3)尋找最優的決策樹是一個NP難的問題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過集成學習之類的方法來改善。
4)有些比較復雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決。
5)如果某些特征的樣本比例過大,生成決策樹容易偏向于這些特征。這個可以通過調節樣本權重來改善。
?
參考:
1 《機器學習》? 周志華
2??https://www.cnblogs.com/pinard/p/6053344.html
3??http://www.cnblogs.com/pinard/p/6050306.html
總結
- 上一篇: 书店售书最低价格问题
- 下一篇: 超有用的方法-----英语单词记忆篇