1. 程式人生 > >【Machine Learning·機器學習】決策樹之ID3演算法(Iterative Dichotomiser 3)

【Machine Learning·機器學習】決策樹之ID3演算法(Iterative Dichotomiser 3)

目錄

  • 1、什麼是決策樹
  • 2、如何構造一棵決策樹?
    • 2.1、基本方法
    • 2.2、評價標準是什麼/如何量化評價一個特徵的好壞?
    • 2.3、資訊熵、資訊增益的計算
    • 2.4、決策樹構建方法
  • 3、演算法總結

@

1、什麼是決策樹

決策樹,就是一種把決策節點畫成樹的輔助決策工具,一種尋找最優方案的畫圖法。
如下圖所示,從左圖到右圖就是一個簡單的,利用決策樹,輔助決策的過程。

2、如何構造一棵決策樹?

2.1、基本方法

通過對不同特徵的優先順序區分判斷後,優先選擇優先順序高的特徵作為劃分的特徵。(如上圖所示,假設優先順序:學歷>院校>工作經驗。因此我們優先選擇了學歷作為分類依據,次而選擇了院校作為分類依據,最後才選擇了專案經驗作為分類依據)。

那麼,下一個問題來了,我們是怎樣判斷一個特徵的優先順序的?具體來說,就是我們在評價一個特徵優先順序時候的評價標準是什麼。這個評價標準,在決策樹中非常重要,一個合適評價標準,可以將不同的特徵按照非常合理的方式進行優先順序排序,從而能夠構建出一顆比較完美的決策樹。而一個不合適的評價標準則會導致最終構造的決策樹出現種種問題。

2.2、評價標準是什麼/如何量化評價一個特徵的好壞?

在不同的決策樹演算法中,這個特徵好壞的評價標準略有不同。比如,在問哦們今天講的ID3演算法中,評價標準是一個叫做 資訊增益(Information Gain) 的東西。而在另一個決策樹演算法C4.5中,評判標準則進一步變為資訊增益比(Information Gain Ration或Gain Ratio)。另外一個比較主流的決策樹演算法CART演算法則是採用 基尼係數(Gini Index) 作為評判標準。這些東西,我們會在後面的幾篇文章中一一涉及到,在本文中,我們將關注的重點放在資訊增益上。

在進入正題之前,我們需要先了解一些簡單的概念。第一個需要我們瞭解的概念叫做熵/entropy。學過中學物理的朋友們可能會有一些印象:熵,熱力學中表徵物質狀態的參量之一,用符號S表示,其物理意義是體系混亂程度的度量。

熵這個概念最初源自於熱力學中,1948年,夏農引入了資訊熵,將其定義為離散隨機事件出現的概率。在資訊學裡面,熵是對不確定性的度量。 一個系統越是有序,資訊熵就越低,反之一個系統越是混亂,它的資訊熵就越高。 所以資訊熵可以被認為是系統有序化程度的一個度量。其本質與熱力學中的熵的概念是相同的。

可這又和我們今天要講的資訊增益這個評判標準有什麼關係呢?我們不妨這樣想,當我們得到一組資訊,一組類似於上圖左半部分的資訊。該組資訊有多個特徵(如學歷、學校等),同時有一組綜合每一個特徵得到的結論。上圖展示的這組資訊只有A、B、C、D四個例項,倘若我們有成千上萬個例項,但看這成千上萬例項構成的表格,我們的第一感受可能是混亂。沒錯,如此多的例項,粗魯地被憑藉在同一個表格中,實在是太混亂了。將混亂換成我們剛剛提到過的說法:這組資訊的資訊熵太高了。 這樣的場景,尤其是當我們想要通過這張表去查詢某些東西,更是非常不便。我們希望可以有某種方法,在降低系統混亂程度/降低系統熵值的同時,不損害資訊的完整性。那麼有沒有這麼一種方法呢?當然有的,就是我們今天講到的決策樹演算法。

從上圖的左邊,到上圖右邊的轉變,我們可以非常直觀感受到,這組資訊不僅變得不那麼混亂,而且這種樹形的表示方式,比較符合我們人類的思維習慣。為什麼會出現這樣感受上的差異呢?其實很簡單,因為我們從右圖的根節點開始,每做一次特徵的劃分,整個系統的熵值就得到了一次降低。 這個資訊系統給我們的感受也就越來越規範。進而,我們很容易地引出資訊增益地概念:資訊增益就是我們以某一個特徵劃分某個資訊系統後,這個系統整體資訊熵降的數值。

接下來,我們很容易可以回答如何去判斷一個特徵的好壞:如果一個特徵,相較於其他所有特徵,在將一個資訊系統按照該特徵劃分前後,可以將整個資料系統的資訊熵降到最低(資訊增益最大),這個特徵就是一個好的特徵。我們應該優先使用該特徵進行系統的劃分。

2.3、資訊熵、資訊增益的計算

在此,我們先給出資訊熵的計算公式:

知道了資訊熵的計算公式後,資訊增益的計算公式也很容易理解,就是當前系統的資訊熵S,減去按照某個特徵劃分整個系統後,每個子系統的資訊熵乘以每個子系統在整個系統所佔比例(Si X Pi),最後相加得到的值。也即:資訊增益 InfoGain = S-Σ(SixPi)。

舉個例子,我們得到如下圖所示的一個資訊系統(該系統前四列為不同的四個特徵,最後一列為結果。),那麼要如何計算整個系統的資訊熵,以及該系統對應某個特徵的資訊增益呢?

首先,可以看出,結果列中一共有14個樣例,其中包括9個正例和5個負例。那麼當前資訊的熵計算

上面,我們計算出了整個系統的資訊熵,也就是未對資料進行劃分時的資訊熵。那麼下面我們計算使用某個特徵對系統進行劃分後,整個系統的資訊熵,以及劃分前後系統資訊熵的差值(資訊增益)比如,我們根據第一個特徵Outlook進行劃分:

劃分後,資料被分為三部分了,那麼各個分支的資訊熵(子系統資訊熵)計算如下:

我們將每個子系統的資訊熵,乘以該子系統在整個系統中所佔比例,依次相加後,得到劃分後系統的整體資訊熵。如下圖所示:

最後,終於來到我們最激動人心的一步了,計算資訊增益,如下圖所示:

2.4、決策樹構建方法

在上一步中,我們計算出每個特徵所對應地資訊增益,選取資訊增益最大的特徵優先劃分整個系統(將系統劃分為一個個子資料集/子樹/子系統)。
在每個子系統中,我們再 重新計算 未被使用過的特徵的優先順序,並選擇優先順序最大的特徵繼續劃分資料集構造子樹。知道,該遞迴構造子樹的過程因為某些原因終止為止。

2.4、構造終止的條件/何時停止構造子樹?

1、當我們發現一個子樹中,結果完全相同,如結果全部為YES的時候,就沒有在該子樹中繼續構造下去的必要了(其他子樹中的構造過程未必終止)。此時我們得到該子樹最終的結果為YES。

2、當我們發現一個子樹中,雖然其結果沒有完全相同,但已經沒有可以支撐我們繼續構造子樹的特徵了(簡而言之就是所有特徵都已經用過了),這個時候就可以停止在該子樹中繼續構造了。此時,該子樹的最終結果為該子樹集合的結果列中,出現次數最多的哪個屬性值。

3、演算法總結

1、判斷每一個子樹中的每個例子結果是否一致或是否特徵已用盡
  是:該子樹構造完成,返回該子樹對應的最終結果。
  否:繼續遞迴構造子樹
若1中結果為否,則:
  1.1、計算當前子系統資訊熵
  1.2、計算未被使用過的特徵的資訊增益
  1.3、選取最大的資訊增益的特徵進行劃分,並從特徵集合中刪除該特徵
  1.4、根據3中劃分構造子樹,並轉向步驟