1. 程式人生 > >[機器學習]詳解分類演算法--決策樹演算法

[機器學習]詳解分類演算法--決策樹演算法

這裡寫圖片描述

前言

演算法的有趣之處在於解決問題,否則僅僅立足於理論,便毫無樂趣可言;
不過演算法的另一特點就是容易嚇唬人,又是公式又是圖示啥的,如果一個人數學理論知識過硬,靜下心來看,都是可以容易理解的,紙老虎一個,不過這裡的演算法主要指的應用型演算法;但是那些證明和研究演算法理論堪稱大牛.
這裡寫圖片描述

現在給大家介紹一下分類演算法中最常用的一種演算法–決策樹演算法

決策樹原理

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

決策樹(Decision Tree)是一種簡單但是廣泛使用的分類器。通過訓練資料構建決策樹,可以高效的對未知的資料進行分類。

決策樹優點

1)決策樹模型可以讀性好,具有描述性,有助於人工分析;
2)效率高,決策樹只需要一次構建,反覆使用,每一次預測的最大計算次數不超過決策樹的深度。

那麼如何進行預測呢?

示例

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

      女兒:多大年紀了?

      母親:26。

      女兒:長的帥不帥?

      母親:挺帥的。

      女兒:收入高不?

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

      女兒:是公務員不?

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

      女兒:那好,我去見見。

      這個女孩的決策過程就是典型的分類樹決策。相當於通過年齡、長相、收入和是否公務員對將男人分為兩個類別:見和不見。假設這個女孩對男人的要求是:
30歲以下、長相中等以上並且是高收入者或中等以上收入的公務員,那麼這個可以用下圖表示女孩的決策邏輯(宣告:此決策樹純屬為了寫文章而YY的產物,沒有任何根據,也不代表任何女孩的擇偶傾向,請各位女同胞莫質問我^_^):

這裡寫圖片描述

分析

上圖完整表達了這個女孩決定是否見一個約會物件的策略,其中綠色節點表示判斷條件,橙色節點表示決策結果,箭頭表示在一個判斷條件在不同情況下的決策路徑,圖中紅色箭頭表示了上面例子中女孩的決策過程。

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

好下面來介紹一下決策樹設計的一般步驟:

基本步驟

決策樹構建的基本步驟如下:

  1. 開始,所有記錄看作一個節點

  2. 遍歷每個變數的每一種分割方式,找到最好的分割點

  3. 分割成兩個節點N1和N2

  4. 對N1和N2分別繼續執行2-3步,直到每個節點足夠“純”為止

決策樹的變數型別:

1) 數字型(Numeric):變數型別是整數或浮點數,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作為分割條件(排序後,利用已有的分割情況,可以優化分割演算法的時間複雜度)。

2) 名稱型(Nominal):類似程式語言中的列舉型別,變數只能重有限的選項中選取,比如前面例子中的“婚姻情況”,只能是“單身”,“已婚”或“離婚”。使用“=”來分割。

如何評估分割點的好壞?如果一個分割點可以將當前的所有節點分為兩類,使得每一類都很“純”,也就是同一類的記錄較多,那麼就是一個好分割點。比如上面的例子,“擁有房產”,可以將記錄分成了兩類,“是”的節點全部都可以償還債務,非常“純”;“否”的節點,可以償還貸款和無法償還貸款的人都有,不是很“純”,但是兩個節點加起來的純度之和與原始節點的純度之差最大,所以按照這種方法分割。構建決策樹採用貪心演算法,只考慮當前純度差最大的情況作為分割點。

在看下面這個例子:
這裡寫圖片描述
上表根據歷史資料,記錄已有的使用者是否可以償還債務,以及相關的資訊。通過該資料,構建的決策樹如下:
這裡寫圖片描述
比如新來一個使用者:無房產,單身,年收入55K,那麼根據上面的決策樹,可以預測他無法償還債務(藍色虛線路徑)。從上面的決策樹,還可以知道是否擁有房產可以很大的決定使用者是否可以償還債務,對借貸業務具有指導意義。

量化純度

前面講到,決策樹是根據“純度”來構建的,如何量化純度呢?這裡介紹三種純度計算方法。如果記錄被分為n類,每一類的比例P(i)=第i類的數目/總數目。還是拿上面的例子,10個數據中可以償還債務的記錄比例為P(1) = 7/10 = 0.7,無法償還的為P(2) = 3/10 = 0.3,N = 2。

Gini不純度

這裡寫圖片描述

熵(Entropy)

這裡寫圖片描述

錯誤率

這裡寫圖片描述

上面的三個公式均是值越大,表示越 “不純”,越小表示越“純”。三種公式只需要取一種即可,實踐證明三種公司的選擇對最終分類準確率的影響並不大,一般使用熵公式。

純度差,也稱為資訊增益(Information Gain),公式如下:
這裡寫圖片描述
其中,I代表不純度(也就是上面三個公式的任意一種),K代表分割的節點數,一般K = 2。vj表示子節點中的記錄數目。上面公式實際上就是當前節點的不純度減去子節點不純度的加權平均數,權重由子節點記錄數與當前節點記錄數的比例決定。

停止條件

決策樹的構建過程是一個遞迴的過程,所以需要確定停止條件,否則過程將不會結束。一種最直觀的方式是當每個子節點只有一種型別的記錄時停止,但是這樣往往會使得樹的節點過多,導致過擬合問題(Overfitting)。另一種可行的方法是當前節點中的記錄數低於一個最小的閥值,那麼就停止分割,將max(P(i))對應的分類作為當前葉節點的分類。

過渡擬合

採用上面演算法生成的決策樹在事件中往往會導致過濾擬合。也就是該決策樹對訓練資料可以得到很低的錯誤率,但是運用到測試資料上卻得到非常高的錯誤率。過渡擬合的原因有以下幾點:

噪音資料:

訓練資料中存在噪音資料,決策樹的某些節點有噪音資料作為分割標準,導致決策樹無法代表真實資料。

缺少代表性資料:

訓練資料沒有包含所有具有代表性的資料,導致某一類資料無法很好的匹配,這一點可以通過觀察混淆矩陣(Confusion Matrix)分析得出。

多重比較(Mulitple Comparition):

舉個列子,股票分析師預測股票漲或跌。假設分析師都是靠隨機猜測,也就是他們正確的概率是0.5。每一個人預測10次,那麼預測正確的次數在8次或8次以上的概率為
這裡寫圖片描述
只有5%左右,比較低。但是如果50個分析師,每個人預測10次,選擇至少一個人得到8次或以上的人作為代表,那麼概率:
這裡寫圖片描述
概率十分大,隨著分析師人數的增加,概率無限接近1。但是,選出來的分析師其實是打醬油的,他對未來的預測不能做任何保證。上面這個例子就是多重比較。這一情況和決策樹選取分割點類似,需要在每個變數的每一個值中選取一個作為分割的代表,所以選出一個噪音分割標準的概率是很大的。