1. 程式人生 > >【轉】深入淺出理解決策樹演算法(一)-核心思想

【轉】深入淺出理解決策樹演算法(一)-核心思想

演算法思想

決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。

其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個類別

使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。

總結來說:

決策樹模型核心是下面幾部分:

  • 結點和有向邊組成
  • 結點有內部結點和葉結點倆種類型
  • 內部結點表示一個特徵,葉節點表示一個類

決策樹表示如下:

 

 

(摘自周志華老師西瓜書)


決策樹代表例項屬性值約束的合取的析取式。從樹根到樹葉的每一條路徑對應一組屬性測試的合取,樹本身對應這些合取的析取。理解這個式子,比如上圖的決策樹對應表示式為:

((紋理=清晰)\wedge(根蒂=蜷縮))\vee((紋理=清晰)\wedge(根蒂=稍蜷)\wedge(色澤=烏黑)\wedge(觸感=硬滑))\vee..........(紋理=模糊)
 

決策例項

假如我現在告訴你,我買了一個西瓜,它的特點是紋理是清晰,根蒂是硬挺的瓜,你來給我判斷一下是好瓜還是壞瓜,恰好,你構建了一顆決策樹,告訴他,沒問題,我馬上告訴你是好瓜,還是壞瓜?

判斷步驟如下:

根據紋理特徵,已知是清晰,那麼走下面這條路,紅色標記:

 

好的,現在咋們到了第二層了,這個時候,由決策樹圖,我們看到,我們需要知道根蒂的特徵是什麼了?很好,他也告訴我了,是硬挺,於是,我們繼續走,如下面藍色所示:

 

 

此時,我們到達葉子結點了,根據上面總結的點,可知,葉子結點代表一種類別,我們從如上決策樹中,可以知道,這是一個壞瓜!

 

於是我們可以很牛的告訴他,你買的這個紋理清晰,根蒂硬挺的瓜是壞瓜,orz!

迴歸源頭

根據上面例子,非常容易直觀的得到了一個例項的類別判斷,只要你告訴我各個特徵的具體值,決策樹的判定過程就相當於樹中從根結點到某一個葉子結點的遍歷。每一步如何遍歷是由資料各個特徵的具體特徵屬性決定。

好的,可能有人要問了,說了這麼多,給你訓練資料,你的決策樹是怎麼構建的呢?沒有樹,談何遍歷,談何分類?

於是構建決策樹也就成為了最重要的工作!

比如,給我下面訓練資料,我如何構建出決策樹

 

我們可以從上面決策樹看出,每一次子結點的產生,是由於我在當前層數選擇了不同的特徵來作為我的分裂因素造成的。比如下圖用紅色三角形表示選擇的特徵:

 

每一層選擇了指定的特徵之後,我們就可以繼續由該特徵的不同屬性值進行劃分,依次一直到葉子結點。

看起來一切很順利!但是細心的小夥伴可能會問了,為什麼在第一次選擇特徵分裂的時候,不選擇觸感呢?而是選擇紋理,比如如下:

 

不換成觸感,或者其它特徵為什麼也不行呢?為什麼選擇的是紋理,這是以什麼標準來選擇特徵的?這就是我們要說的決策樹的關鍵步驟是分裂屬性。

所謂分裂屬性就是在某個節點處按照某一特徵屬性的不同劃分構造不同的分支,其目標是讓各個分裂子集儘可能地“純”。儘可能“純”就是儘量讓一個分裂子集中待分類項屬於同一類別。

而判斷“純”的方法不同引出了我們的ID3演算法,C4.5演算法以及CART演算法,這些後面會詳細介紹!

好的,那麼這篇文章在預設已經按照一種分裂方式,構建好了決策樹!對一個預測資料的類別估計,就是按照我上面說的那樣,進行決策樹的遍歷即可!非常容易理解。

希望對大家理解決策樹有幫助~

 

參考:

周志華《機器學習》

德川《全體機器學習會slides》

演算法雜貨鋪--分類演算法之決策樹(Decision tree)

釋出於 2017-05-03