決策樹分類算法及python代碼實現案例


決策樹分類算法

1、概述

決策樹(decision tree——是一種被廣泛使用的分類算法。

相比貝葉斯算法,決策樹的優勢在於構造過程不需要任何領域知識或參數設置

在實際應用中,對於探測式的知識發現,決策樹更加適用。

 

2、算法思想

通俗來說,決策樹分類的思想類似於找對象。現想象一個女孩的母親要給這個女孩介紹男朋友,於是有了下面的對話:

      女兒:多大年紀了?

      母親:26

      女兒:長的帥不帥?

      母親:挺帥的。

      女兒:收入高不?

      母親:不算很高,中等情況。

      女兒:是公務員不?

      母親:是,在稅務局上班呢。

      女兒:那好,我去見見。

 

這個女孩的決策過程就是典型的分類樹決策。

實質:通過年齡、長相、收入和是否公務員對將男人分為兩個類別:見和不見

 

假設這個女孩對男人的要求是:30歲以下、長相中等以上並且是高收入者或中等以上收入的公務員,那么這個可以用下圖表示女孩的決策邏輯

 

上圖完整表達了這個女孩決定是否見一個約會對象的策略,其中:

◊綠色節點表示判斷條件

◊橙色節點表示決策結果

◊箭頭表示在一個判斷條件在不同情況下的決策路徑

圖中紅色箭頭表示了上面例子中女孩的決策過程。

 

這幅圖基本可以算是一顆決策樹,說它“基本可以算”是因為圖中的判定條件沒有量化,如收入高中低等等,還不能算是嚴格意義上的決策樹,如果將所有條件量化,則就變成真正的決策樹了。

 

決策樹分類算法的關鍵就是根據“先驗數據”構造一棵最佳的決策樹,用以預測未知數據的類別

 

決策樹是一個樹結構(可以是二叉樹或非二叉樹)其每個非葉節點表示一個特征屬性上的測試,每個分支代表這個特征屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特征屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。

 

3、決策樹構造

假如有以下判斷蘋果好壞的數據樣本:

樣本    紅     大      好蘋果

0       1      1         1

1       1      0         1

2       0      1         0

3       0      0         0

 

 

樣本中有2個屬性,A0表示是否紅蘋果。A1表示是否大蘋果。假如要根據這個數據樣本構建一棵自動判斷蘋果好壞的決策樹。

由於本例中的數據只有2個屬性,因此,我們可以窮舉所有可能構造出來的決策樹,就2棵,如下圖所示:

 

顯然左邊先使用A0(紅色)做划分依據的決策樹要優於右邊用A1(大小)做划分依據的決策樹。

當然這是直覺的認知。而直覺顯然不適合轉化成程序的實現,所以需要有一種定量的考察來評價這兩棵樹的性能好壞。

決策樹的評價所用的定量考察方法計算每種划分情況的信息熵增益

如果經過某個選定的屬性進行數據划分后的信息熵下降最多,則這個划分屬性是最優選擇

 

屬性划分選擇(即構造決策樹)的依據:

簡單來說,就是無序,混亂的程度

通過計算來理解:

1原始樣本數據的熵:

樣例總數:4

好蘋果:2

壞蘋果:2

熵: -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1

信息熵為1表示當前處於最混亂,最無序的狀態。

 

2、兩顆決策樹的划分結果熵增益計算

1先選A0作划分,各子節點信息熵計算如下:

01葉子節點有2個正例,0個負例。信息熵為:e1 = -(2/2 * log(2/2) + 0/2 * log(0/2)) = 0

23葉子節點有0個正例,2個負例。信息熵為:e2 = -(0/2 * log(0/2) + 2/2 * log(2/2)) = 0

因此選擇A0划分后的信息熵為每個子節點的信息熵所占比重的加權和:E = e1*2/4 + e2*2/4 = 0

選擇A0做划分的信息熵增益GS, A0=S - E = 1 - 0 = 1.

事實上,決策樹葉子節點表示已經都屬於相同類別,因此信息熵一定為0

 

2先選A1作划分,各子節點信息熵計算如下:

02子節點有1個正例,1個負例。信息熵為:e1 = -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1

13子節點有1個正例,1個負例。信息熵為:e2 = -(1/2 * log(1/2) + 1/2 * log(1/2)) = 1

因此選擇A1划分后的信息熵為每個子節點的信息熵所占比重的加權和:E = e1*2/4 + e2*2/4 = 1。也就是說分了跟沒分一樣!

選擇A1做划分的信息熵增益GS, A1=S - E = 1 - 1 = 0.

 

因此,每次划分之前,我們只需要計算出信息熵增益最大的那種划分即可。

先做A0划分時的信息熵增益為1>先做A1划分時的信息熵增益,所以先做A0划分是最優選擇!!!

 

4、算法指導思想

經過決策屬性的划分后,數據的無序度越來越低,也就是信息熵越來越小

 

5、算法實現

梳理出數據中的屬性

比較按照某特定屬性划分后的數據的信息熵增益,選擇信息熵增益最大的那個屬性作為第一划分依據,然后繼續選擇第二屬性,以此類推

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM