1. 程式人生 > >機器學習_7.認識決策樹

機器學習_7.認識決策樹

決策樹

決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價專案風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。在機器學習中,決策樹是一個預測模型,他代表的是物件屬性與物件值之間的一種對映關係。Entropy = 系統的凌亂程度,使用演算法ID3C4.5和C5.0生成樹演算法使用熵。這一度量是基於資訊學理論中熵的概念。

詳見百度百科

舉例

遊戲中,出題者寫下一個明星的名字,其他人需要猜出這個人是誰。當然,如果遊戲規則僅此而已的話,幾乎是無法猜出來的,因為問題的規模太大了。為了降低遊戲的難度,答題者可以向出題者問問題,而出題者必須準確回答是或者否,答題者依據回答提出下一個問題,如果能夠在指定次數內確定謎底,即為勝出。加入了問答規則之後,我們是否有可能猜出謎底呢?我們先實驗一下,若問答記錄如下:
  1. 是男的嗎?Y
  2. 是亞洲人嗎?Y
  3. 是中國人嗎?N
  4. 是印度人嗎?Y
  5. ......

通過不斷引入條件判斷縮小範圍,最終找到最接近真實的答案。

在上面的遊戲中,我們針對性的提出問題,每一個問題都可以將我們的答案範圍縮小,在提問中和回答者有相同知識背景的前提下,得出答案的難度比我們想象的要小很多。
  回到我們最初的問題中,如何將樹結構用於機器學習中?結合上面的圖,我們可以看出,在每一個節點,依據問題答案,可以將答案劃分為左右兩個分支,左分支代表的是Yes,右分支代表的是No,雖然為了簡化,我們只畫出了其中的一條路徑,但是也可以明顯看出這是一個樹形結構,這便是決策樹的原型。

決策樹演算法簡介

我們面對的樣本通常具有很多個特徵,正所謂對事物的判斷不能只從一個角度,那如何結合不同的特徵呢?決策樹演算法的思想是,先從一個特徵入手,就如同我們上面的遊戲中一樣,既然無法直接分類,那就先根據一個特徵進行分類,雖然分類結果達不到理想效果,但是通過這次分類,我們的問題規模變小了,同時分類後的子集相比原來的樣本集更加易於分類了。然後針對上一次分類後的樣本子集,重複這個過程。在理想的情況下,經過多層的決策分類,我們將得到完全純淨的子集,也就是每一個子集中的樣本都屬於同一個分類。

                                              

比如上圖中,平面座標中的六個點,我們無法通過其x座標或者y座標直接就將兩類點分開。採用決策樹演算法思想:我們先依據y座標將六個點劃分為兩個子類(如水平線所示),水平線上面的兩個點是同一個分類,但是水平線之下的四個點是不純淨的。但是沒關係,我們對這四個點進行再次分類,這次我們以x左邊分類(見圖中的豎線),通過兩層分類,我們實現了對樣本點的完全分類。這樣,我們的決策樹的虛擬碼實現如下:

if y > a:
    output dot
else:
    if x < b:
          output cross
    else:
          output dot

由這個分類的過程形成一個樹形的判決模型,樹的每一個非葉子節點都是一個特徵分割點,葉子節點是最終的決策分類。將新樣本輸入決策樹進行判決時,就是將樣本在決策樹上自頂向下,依據決策樹的節點規則進行遍歷,最終落入的葉子節點就是該樣本所屬的分類。

決策樹演算法流程

上面我們介紹決策樹演算法的思想,可以簡單歸納為如下兩點:
  1.每次選擇其中一個特徵對樣本集進行分類
  2.對分類後的子集遞迴進行步驟1

看起來是不是也太簡單了呢?實際上每一個步驟我們還有很多考慮的。在第一個步驟中,我們需要考慮的一個最重要的策略是,選取什麼樣的特徵可以實現最好的分類效果,而所謂的分類效果好壞,必然也需要一個評價的指標。在上文中,我們都用純淨來說明分類效果好,那何為純淨呢?直觀來說就是集合中樣本所屬類別比較集中,最理想的是樣本都屬於同一個分類。樣本集的純度可以用來進行衡量。
  在資訊理論中,熵代表了一個系統的混亂程度,熵越大,說明我們的資料集純度越低,當我們的資料集都是同一個類別的時候,熵為0,熵的計算公式如下:


  其中,P(xi)表示概率,b在此處取2。比如拋硬幣的時候,正面的概率就是1/2,反面的概率也是1/2,那麼這個過程的熵為:


  可見,由於拋硬幣是一個完全隨機事件,其結果正面和反面是等概率的,所以具有很高的熵。假如我們觀察的是硬幣最終飛行的方向,那麼硬幣最後往下落的概率是1,往天上飛的概率是0,帶入上面的公式中,可以得到這個過程的熵為0,所以,熵越小,結果的可預測性就越強。在決策樹的生成過程中,我們的目標就是要劃分後的子集中其熵最小,這樣後續的的迭代中,就更容易對其進行分類。
  既然是遞迴過程,那麼就需要制定遞迴的停止規則。在兩種情況下我們停止進一步對子集進行劃分,其一是劃分已經達到可以理想效果了,另外一種就是進一步劃分收效甚微,不值得再繼續了。用專業術語總結終止條件有以下幾個:
  1. 子集的熵達到閾值
  2. 子集規模夠小
  3. 進一步劃分的增益小於閾值

其中,條件3中的增益代表的是一次劃分對資料純度的提升效果,也就是劃分以後,熵減少越多,說明增益越大,那麼這次劃分也就越有價值,增益的計算公式如下:

Gain=e原-e新

上述公式可以理解為:計算這次劃分之後兩個子集的熵之和相對劃分之前的熵減少了多少,需要注意的是,計運算元集的熵之和需要乘上各個子集的權重,權重的計算方法是子集的規模佔分割前父集的比重,比如劃分前熵為e,劃分為子集A和B,大小分別為m和n,熵分別為e1和e2,那麼增益就是e - m/(m + n) * e1 - n/(m + n) * e2

下篇將會總結一下決策樹的演算法