1. 程式人生 > 其它 >【學習筆記】 決策樹演算法原理

【學習筆記】 決策樹演算法原理

決策樹ID3演算法

演算法的過程為:
1)初始化資訊增益的閾值ϵ
2)判斷樣本是否為同一類輸出Di,如果是則返回單節點樹T。標記類別為Di
3) 判斷特徵是否為空,如果是則返回單節點樹T,標記類別為樣本中輸出類別D例項數最多的類別。
4)計算A中的各個特徵(一共n個)對輸出D的資訊增益,選擇資訊增益最大的特徵Ag
5) 如果Ag的資訊增益小於閾值ϵ,則返回單節點樹T,標記類別為樣本中輸出類別D例項數最多的類別。
6)否則,按特徵Ag的不同取值Agi將對應的樣本輸出D分成不同的類別Di。每個類別產生一個子節點。對應特徵值為Agi。返回增加了節點的數T。
7)對於所有的子節點,令D=Di,A=A−{Ag}遞迴呼叫2-6步,得到子樹Ti並返回。

我的理解是,從根節點開始逐層往下,不停的計算接下來要分類的特徵的熵,選取熵最大的,也就是能夠最快的做出分類的那一類分類方法
這樣的話也就好理解ID3演算法的種種不足了

  • ID3沒有考慮連續特徵,比如長度,密度都是連續值,無法在ID3運用。這大大限制了ID3的用途。
  • ID3採用資訊增益大的特徵優先建立決策樹的節點。很快就被人發現,在相同條件下,取值比較多的特徵比取值少的特徵資訊增益大。比如一個變數有2個值,各為1/2,另一個變數為3個值,各為1/3,其實他們都是完全不確定的變數,但是取3個值的比取2個值的資訊增益大。如果校正這個問題呢?
  • ID3演算法對於缺失值的情況沒有做考慮
  • 沒有考慮過擬合的問題
    這裡單獨說一下對第二點的理解,就是當有一些明明完全不確定的變量出現的時候,ID3演算法還是會頑固的根據數量多的資料來取資訊增益,這樣的出來的結論就會有極大的偶然性

決策樹C4.5演算法

ID3演算法有四個主要的不足,一是不能處理連續特徵,第二個就是用資訊增益作為標準容易偏向於取值較多的特徵,最後兩個是缺失值處理的問和過擬合問題。昆蘭在C4.5演算法中改進了上述4個問題

  • 對於第一個問題,不能處理連續特徵, C4.5的思路是將連續的特徵離散化。比如m個樣本的連續特徵A有m個,從小到大排列為a1,a2,...,am,則C4.5取相鄰兩樣本值的平均數,一共取得m-1個劃分點,分別計算以該點作為二元分類點時的資訊增益。選擇資訊增益最大的點作為該連續特徵的二元離散分類點。比如取到的增益最大的點為at,則小於at的值為類別1,大於at的值為類別2,這樣我們就做到了連續特徵的離散化。要注意的是,與離散屬性不同的是,如果當前節點為連續屬性,則該屬性後面還可以參與子節點的產生選擇過程。
  • 對於第二個問題,資訊增益作為標準容易偏向於取值較多的特徵的問題。我們引入一個資訊增益比的變數IR(X,Y),它是資訊增益和特徵熵的比值。特徵數越多的特徵對應的特徵熵越大,它作為分母,可以校正資訊增益容易偏向於取值較多的特徵的問題。
  • 對於第三個缺失值處理的問題,主要需要解決的是兩個問題,一是在樣本某些特徵缺失的情況下選擇劃分的屬性,二是選定了劃分屬性,對於在該屬性上缺失特徵的樣本的處理。
    對於第一個子問題,對於某一個有缺失特徵值的特徵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。
  • 對於第4個問題,C4.5引入了正則化係數進行初步的剪枝。CART會詳細討論剪枝的思路。
    除了上面的4點,C4.5和ID的思路區別不大。
    簡單概述一下這四個方法,
    第一個問題的解決方案就是將連續的特徵離散化,但是由於其實我不是很懂連續性是什麼意思,所以只能大致瞭解一下
    第二個問題的解決辦法是把數值的個數也作為變數加進去,把原來的結果變成一個比值,這樣就相當於降低了資料少的資料所帶來的影響
    第三個問題的解決辦法是對資料加入權重,缺失值的資料權重降低
    第四個問題的解決辦法是CART剪枝

決策樹C4.5演算法的不足與思考

  • 由於決策樹演算法非常容易過擬合,因此對於生成的決策樹必須要進行剪枝。剪枝的演算法有非常多,C4.5的剪枝方法有優化的空間。思路主要是兩種,一種是預剪枝,即在生成決策樹的時候就決定是否剪枝。另一個是後剪枝,即先生成決策樹,再通過交叉驗證來剪枝。後面在下篇講CART樹的時候我們會專門講決策樹的減枝思路,主要採用的是後剪枝加上交叉驗證選擇最合適的決策樹。
  • C4.5生成的是多叉樹,即一個父節點可以有多個節點。很多時候,在計算機中二叉樹模型會比多叉樹運算效率高。如果採用二叉樹,可以提高效率。
  • C4.5只能用於分類,如果能將決策樹用於迴歸的話可以擴大它的使用範圍。
  • C4.5由於使用了熵模型,裡面有大量的耗時的對數運算,如果是連續值還有大量的排序運算。如果能夠加以模型簡化可以減少運算強度但又不犧牲太多準確性的話,那就更好了。

CART剪枝

  • 所謂的分類樹,實際上就是把每個特徵基尼指數乘以資料所佔的比值,然後得出來最小的那個作為分類,在那個分類裡面再用上面方法進行篩選,一直到最後,在畫出樹
  • 而解決迴歸問題的時候和分類樹類似,只是使用不同的公式(平方誤差)來不斷的確定切分點,每個點上會有一個值,這個值對應的是那個區域的值的平均值

剪枝

由於決策時演算法很容易對訓練集過擬合,而導致泛化能力差,為了解決這個問題,我們需要對CART樹進行剪枝,即類似於線性迴歸的正則化,來增加決策樹的泛化能力。但是,有很多的剪枝方法,我們應該這麼選擇呢?CART採用的辦法是後剪枝法,即先生成決策樹,然後產生所有可能的剪枝後的CART樹,然後使用交叉驗證來檢驗各種剪枝的效果,選擇泛化能力最好的剪枝策略。也就是說,CART樹的剪枝演算法可以概括為兩步,第一步是從原始決策樹生成各種剪枝效果的決策樹,第二部是用交叉驗證來檢驗剪枝後的預測能力,選擇泛化預測能力最好的剪枝後的數作為最終的CART樹。

缺點

無論是ID3, C4.5還是CART,在做特徵選擇的時候都是選擇最優的一個特徵來做分類決策,但是大多數,分類決策不應該是由某一個特徵決定的,而是應該由一組特徵決定的。這樣決策得到的決策樹更加準確。這個決策樹叫做多變數決策樹(multi-variate decision tree)。在選擇最優特徵的時候,多變數決策樹不是選擇某一個最優特徵,而是選擇最優的一個特徵線性組合來做決策。這個演算法的代表是OC1,這裡不多介紹。
如果樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過整合學習裡面的隨機森林之類的方法解決。

小結

cart具體方法沒整明白,但是思路懂了,其他都還可以