白天太陽升起,總是給人希望,無盡的黑夜往往讓人無助。魯迅說:黑暗中的一點光亮給人以溫暖,然而正因為光亮之有限,反襯出周圍更加廣袤的黑暗,又帶給人新的絕望。生活總在希望和失望之間交錯前行,當黑暗來臨時,我們或許可如螢火般,在黑暗里發一點光,而不必等候炬火(天氣越冷,雞湯越暖,你懂的)。
今天學習機器學習算法中的決策樹,是一種簡單高效並且具有強解釋性的模型,廣泛應用於數據分析領域。其本質是一顆由多個判斷節點組成的樹,如:

決策樹經過訓練之后,看起來像是以樹狀形式排列的一系列if-then語句。一旦我們有了決策樹,只要沿着樹的路徑一直向下,正確回答每一個問題,最終就會得到答案。沿着最終的葉節點向上回溯,就會得到一個有關最終分類結果的推理過程。
決策樹由一個個判斷節點組成,每經過一個判斷節點數據就會被拆分一次。那么如何選擇最合適的拆分條件呢?我們需要量化指標來進行評價,在決策樹算法中,通過基尼不純度或者熵來對一個(拆分后的)集合進行的有序程度進行量化,然后引入信息增益概念對一次拆分進行量化評價。
-
基尼不純度
定義:將來自集合的某種結果隨機應用於某一數據項的預期誤差率。
直觀解釋是一個隨機事件變成它的對立事件的概率。
例如 一個隨機事件X ,P(X=0) = 0.5 ,P(X=1)=0.5
那么基尼不純度就為 P(X=0)*(1 - P(X=0)) + P(X=1)*(1 - P(X=1)) = 0.5
一個隨機事件Y ,P(Y=0) = 0.1 ,P(Y=1)=0.9
那么基尼不純度就為P(Y=0)*(1 - P(Y=0)) + P(Y=1)*(1 - P(Y=1)) = 0.18
很明顯 X比Y更混亂,因為兩個都為0.5 很難判斷哪個發生。而Y就確定得多,Y=1發生的概率很大。而基尼不純度也就越小。
所以基尼不純度也可以作為衡量系統混亂程度的標准。
Gini impurity公式:

(其中fi表示事件i/分類i發生的概率)
-
熵
熵是信息論中的概念,用來表示集合的無序程度,熵越大表示集合越混亂,反之則表示集合越有序。熵的計算公式為:

比如投了4次硬幣,2次正面,2次反面。根據香農公式那么熵就為E=-1/2log2(1/2)-1/2log2(1/2)=1。同理如果每次都是正面的話,那么熵為0。
信息論熵的概念在吳軍的《數學之美》中有很好的解釋:
我們來看一個例子,馬上要舉行世界杯賽了。大家都很關心誰會是冠軍。假如我錯過了看世界杯,賽后我問一個知道比賽結果的觀 眾“哪支球隊是冠軍”? 他不願意直接告訴我, 而要讓我猜,並且我每猜一次,他要收一元錢才肯告訴我是否猜對了,那么我需要付給他多少錢才能知道誰是冠軍呢? 我可以把球隊編上號,從 1 到 32, 然后提問: “冠軍的球隊在 1-16 號中嗎?” 假如他告訴我猜對了, 我會接着問: “冠軍在 1-8 號中嗎?” 假如他告訴我猜錯了, 我自然知道冠軍隊在 9-16 中。 這樣只需要五次, 我就能知道哪支球隊是冠軍。所以,誰是世界杯冠軍這條消息的信息量只值五塊錢。 當然,香農不是用錢,而是用 “比特”(bit)這個概念來度量信息量。 一個比特是一位二進制數,計算機中的一個字節是八個比特。在上面的例子中,這條消息的信息量是五比特。(如果有朝一日有六十四個隊進入決賽階段的比賽,那 么“誰世界杯冠軍”的信息量就是六比特,因為我們要多猜一次。) 讀者可能已經發現, 信息量的比特數和所有可能情況的對數函數 log 有關。 (log32=5, log64=6。) 有些讀者此時可能會發現我們實際上可能不需要猜五次就能猜出誰是冠軍,因為象巴西、德國、意 大利這樣的球隊得冠軍的可能性比日本、美國、韓國等隊大的多。因此,我們第一次猜測時不需要把 32 個球隊等分成兩個組,而可以把少數幾個最可能的球隊分成一組,把其它隊分成另一組。然后我們猜冠軍球隊是否在那幾只熱門隊中。我們重復這樣的過程,根據奪 冠概率對剩下的候選球隊分組,直到找到冠軍隊。這樣,我們也許三次或四次就猜出結果。因此,當每個球隊奪冠的可能性(概率)不等時,“誰世界杯冠軍”的信 息量的信息量比五比特少。香農指出,它的准確信息量應該是
= -(p1*log p1 + p2 * log p2 + ... +p32 *log p32), 其 中,p1,p2 , ...,p32 分別是這 32 個球隊奪冠的概率。香農把它稱為“信息熵” (Entropy),一般用符號 H 表示,單位是比特。有興趣的讀者可以推算一下當 32 個球隊奪冠概率相同時,對應的信息熵等於五比特。
-
信息增益
信息增益是用來選取分類屬性的。被選擇的分類屬性,信息增益是最高的。
信息增益的方法會偏向於選擇將樣本分為多類的屬性,而這個屬性對於機器學習可能是沒有意義的。 因此有時也用信息增益率的方式來選取特征。
比如對於特征A的信息增益有以下公式:

(Info為熵或基尼不純度)
舉例說明:選取特征把以下數據分類。應該如何選取特征呢?

有性別和年齡兩個特征(先不計觀點序號),選取哪一個作為分類特征呢?
首先通過信息增益的計算來進行選取。
1)如果選取性別作為特征,那么


2)以年齡為特征,則
因此選性別作為分類特征。
但是這種選取有一個問題,假如我們增加了一個觀點序號的特征,那個這個特征可以將數據分為4類。則Gain("Opinionno")=1.5 在這種情況下觀點序號就被選作了特征,顯然是不合理的。
-
信息增益率
用信息增益率來解決以上問題,這個方法很簡單直接,就是對分類太多的特征進行一定的懲罰。 有以下公式 :

其中
為屬性A的內部信息(Intrinsic Information of an Attribute)。實際上就是集合D關於屬性A的各取值的熵。
因此在第一次迭代中選取性別作為特征。
-
構造決策樹
我們已經可以通過信息增益量化一次拆分的結果好壞,下一步就是構造決策樹,主要步驟如下:
1、遍歷每個決策條件(如:擁有房產、已婚),對結果集進行拆分;
2、計算該決策條件下,所有可能的拆分情況的信息增益,信息增益最大的拆分為本次最優拆分;
3、遞歸執行1、2兩步,直至信息增益<=0。
執行完上述步驟后,就構造出了一顆決策樹,如圖:

下周學習如何在sklearn中使用決策樹,敬請期待:)
