【機器學習入門】決策樹的原理

什麼是決策樹?

決策樹(Decision Tree) 是一種數據結構,可以用來分類和迴歸,決策樹是數據結構,但構建決策樹有一系列的算法,決策樹的核心之一就是利用算法構建最佳的決策樹,以達到在訓練數據和測試數據都表現優秀的效果。

決策樹的構建和人類的思維過程非常的類似。

假設,我現在要招聘算法工程師,現在有下面一份已經存在的面試記錄。

姓名 PYTHON 機器學習 數學 錄取
莫大
柯二 不會
張三 不會
李四 不會 不會
王五 不會
趙六 不會 不會
秦七 不會
古八 不會
宋九 不會 不會

那好,現在有一個新的求職者的面試記錄

姓名 PYTHON 機器學習 數學 錄取
朱十 不會 ?

現在的問題是,該不該錄取宋九?

決策樹就是用來解決這類問題的。

比如,我們可以這樣思考。

Created with Raphaël 2.2.0面試者機器學習數學錄取Python淘汰yesnoyesnoyesno

這是流程圖,我們大概都是這樣思考問題的。

翻譯成決策樹如下圖所示:

在這裏插入圖片描述

這裏需要注意兩個重要的概念。

內部節點

上圖中菱形表示的都是內部節點,內部節點用來表示特徵或者屬性。

機器學習、數學、Python 這些都是數據集中的特徵。

葉節點

葉節點表示類別。

上圖位於每個分支末端的圓形都是葉節點。

我們本次示例中的類別有兩種,錄取和淘汰。

當我們順着決策樹進行決策時,很自然地會有一個答案。

心細的同學會有疑問,既然有多種特徵,爲什麼上面的決策樹一定要把機器學習作爲根節點呢?

是的,把不同的特徵作爲根節點構建決策樹都可以,但是最後的效果就不一樣。

在這裏插入圖片描述

上面可以看到,決策樹是構建成功了,但是效果恐怕不能讓人滿意。

所以,決策樹最核心的一步就是選擇合適的根節點,然後遞歸進行。

怎麼做呢?

這裏通過數學手段完成。

決策樹中的數學

決策樹中用到的數學知識可以看做是條件概率和熵的結合,實際上構建一棵決策樹可以看做是擬合一種條件概率分佈。

我們先簡單回顧一下條件概率。

條件概率

事件 A:明天會下雨的
事件 B: 明天去加班

條件概率 P(B|A) 就是明天下雨的情況下,同時會要求加班的概率。
如果 A 和 B 是獨立事件,那麼條件概率就是 P(A)*P(B)

再回到我們的示例,我們可以這樣看

事件 A:面試者會 Python
事件 B:面試者被錄取

那麼條件概率就是 P(B|A) 面試者會 Python 同時被錄取的概率。
從根節點到葉節點,每一條路徑對應一個條件概率,所以條件概率可以共同組成一個概率分佈。

前面講到過,選擇哪一個特徵作爲決策樹的根節點是非常重要的,這裏需要另外一個數學知識解決,那就是熵(entropy)。

熵本來是物理概念,用來衡量一個封閉的系統中無法利用的能量。

在信息論中,熵是用來度量系統的不確定程度的。

怎麼理解呢?

我們通常說一個人靠譜或者是不靠譜,這個通常是比較感性的,做感性的判斷容易終究不好,所以很多人想到了量化。

比方說,判斷某個人能不能完成任務的概率爲 P.

  • P = 0,說明這個人的能力很差,肯定不能完成任務
  • P = 1, 說明這個人的能力很強,絕對可以完成任務

我們用熵來定義不確定性。

熵的公式如下

H(X)=i=1npilogpi H(X)=-\sum_{i=1}^{n}p_{i}\log p_{i}

如果 P 只有 0 或者 1 兩種取值的話。

熵的結果都是 0.

熵等於 0 的意思是,百分百肯定,沒有什麼不確定的。

下次你再聽到別人說:“我早就知道你肯定不行”

這個時候,你要在心裏翻譯過來,他對你建立了一個判斷模型,這個模型中他認爲熵幾乎爲 0,沒有什麼不確定性,他看死你了。

下面再講條件熵。

對比之前的條件概率,我們可以很容易理解。

條件熵H(Y|X)是衡量在隨機變量X已經確定的條件下,Y取值的不確定性。

可以這麼理解。

假設隨機變量 X 表示面試者的 Python 等級,取值有會和不會兩種。
隨機變量 Y 表示最終的錄取結果,有錄取和淘汰兩種。

那麼,H(Y|X) 就是已知面試者的 Python 等級,求面試者最終錄取結果的不確定性。

公式如下:

H(YX)=i=1npiH(YX=xi) H(Y|X) = \sum_{i=1}^{n}p_{i}H(Y|X=x_{i})

信息增益(information gain)

有了熵和條件熵還不夠,我們的目的是減少熵,爲此引入了信息增益。

g(D,A)=H(D)H(DA) g(D,A) = H(D) - H(D|A)
上面 D 指代訓練集。
H(D) 被稱爲經驗熵。
H(D|A) 經驗條件熵
g(D,A) A 對 D 的信息增益

H(D) 說明的是訓練集合,分類的不確定程度。
H(D|A) 說明的是特徵 A 選定條件下,訓練集的分類不確定程度。
g(D,A) 說明的是選定特徵 A 後,對於提升 D 的分類確定性有多少。

g(D,A) 自然是越高越好,這也是它增益的意義體現。

不同的特徵,信息增益不一樣,所以它們對於構建準確的決策樹價值也不一樣。

我們構建決策樹時,以信息增益最大的特徵爲基礎。

信息增益

我們可以針對示例中不同的特徵,求其信息增益

首先看經驗熵。

所以的訓練樣本記爲 D,分類結果爲 C

C 有兩種取值:錄取和淘汰

姓名 PYTHON 機器學習 數學 錄取
莫大
柯二 不會
張三 不會
李四 不會 不會
王五 不會
趙六 不會 不會
秦七 不會
古八 不會
宋九 不會 不會

我們觀察表格,可以知道錄取 2 人,淘汰 7 人,共 9 人。

H(D)=k=1KCkDlog2CkD H(D) = -\sum_{k=1}^{K}\frac{|C_{k}|}{|D|}\log_{2}\frac{|C_{k}|}{|D|}

CkC_{k} 表示某一類別,Ck|C_{k}| 該類別下的樣本數量。

比如C1C_{1}代表錄取的人,錄取的人數是 2 個,C2C_{2}代表淘汰的人,淘汰的人數是 7 個。

所以
H(D)=29log22979log279=0.764 H(D)=-\frac{2}{9}*\log_{2} \frac{2}{9}-\frac{7}{9}*\log_{2} \frac{7}{9} = 0.764

經驗條件熵也有公式

H(D,A)=i=1nDiDH(Di)=i=1nDiDk=1Klog2DikDi H(D,A) = -\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\sum_{k=1}^{K}\log_{2}\frac{|D_{ik}|}{|D_{i}|}

公式可能比較複雜,但是還是比較容易理解的。

A 指代某種特徵,A 將 DD 劃分了不同的子集,DiD_{i} 是某一個子集。Di|D_{i}| 是對應的子集中樣本的數量。

比如按照Python 這個特徵,可以將 D 劃分爲 D1,D2 兩個子集,D1 代表會,D2 代表不會。兩者的數量分別爲 4 和 5。

DikD_{ik} 表示 Di 子集中,屬於類別 CkC_{k} 的集合。

比如會 Python 的人中,最終被錄取的那些人。

下面求Python這一特徵的經驗條件熵,設 Python 爲 特徵 A1.

H(D1)=14log21434log234=0.811 H(D_{1})=-\frac{1}{4}*\log_{2} \frac{1}{4}-\frac{3}{4}*\log_{2} \frac{3}{4} = 0.811

H(D2)=15log21545log245=0.722 H(D_{2})=-\frac{1}{5}*\log_{2} \frac{1}{5}-\frac{4}{5}*\log_{2} \frac{4}{5} = 0.722

H(D,A1)=29H(D1)79H(D2)=0.762 H(D,A_{1})=-\frac{2}{9}*H(D_{1})-\frac{7}{9}*H({D_{2}}) = 0.762

有了H(D)H(D)H(D,A)H(D,A)之後,就可以求信息增益了

g(D,A1)=H(D)H(D,A1)=0.7640.762=0.002 g(D,A_{1})=H(D)-H(D,A_{1}) = 0.764 - 0.762 = 0.002

增益爲 0.002 ,這代表着以 Python 爲特徵劃分數據集 D,對於減少分類不確定性毫無幫助。

那麼,設機器學習爲 A2,數學爲 A3,按照同樣的結果,它們的信息增益分別是:

H(D,A2)=390.918690=0.306g(D,A2)=0.7640.306=0.458 H(D,A_{2}) = -\frac{3}{9}*0.918- \frac{6}{9}*0 = 0.306 g(D,A_{2}) = 0.764 - 0.306 = 0.458

H(D,A3)=490.811590.722=0.762g(D,A2)=0.7640.762=0.002 H(D,A_{3}) = -\frac{4}{9}*0.811 -\frac{5}{9}*0.722= 0.762 g(D,A_{2}) = 0.764 - 0.762 = 0.002

按照信息增益,機器學習應該就是最關鍵的特徵。

但是,信息增益 有個缺點,就是結果容易偏向樣本多的特徵。

因此,除了信息增益外還有個信息增益比.

定義如下
gR(D,A)=g(D,A)HA(D) g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}

其中,
HA(D)=i=1nDiDlog2DiD H_A(D)=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\log_{2}\frac{|D_{i}|}{|D|}

我們也可以按照公式來計算,每個特徵的信息增益比。

gR(D,A1)=0.003 g_{R}(D,A_{1}) = 0.003

gR(D,A2)=0.499 g_{R}(D,A_{2}) = 0.499

gR(D,A3)=0.003 g_{R}(D,A_{3}) = 0.003

可以看到,仍然說明了機器學習是錄取判斷中的關鍵特徵。

特徵的選取是遞歸進行的,先選取最優的特徵,然後用同樣的方法選取次優的特徵,直到滿足預設的條件。

常見的有 2 種算法,ID3 和 C4.5。

ID3 是以信息增益爲選擇依據,C4.5 以信息增益比爲算法依據。

後續的博文將詳細講解它們的算法實踐過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章