什麼是決策樹?
決策樹(Decision Tree) 是一種數據結構,可以用來分類和迴歸,決策樹是數據結構,但構建決策樹有一系列的算法,決策樹的核心之一就是利用算法構建最佳的決策樹,以達到在訓練數據和測試數據都表現優秀的效果。
決策樹的構建和人類的思維過程非常的類似。
假設,我現在要招聘算法工程師,現在有下面一份已經存在的面試記錄。
姓名 | PYTHON | 機器學習 | 數學 | 錄取 |
---|---|---|---|---|
莫大 | 會 | 會 | 低 | 是 |
柯二 | 不會 | 會 | 高 | 是 |
張三 | 不會 | 會 | 低 | 否 |
李四 | 不會 | 不會 | 高 | 否 |
王五 | 會 | 不會 | 低 | 否 |
趙六 | 不會 | 不會 | 高 | 否 |
秦七 | 會 | 不會 | 高 | 否 |
古八 | 會 | 不會 | 低 | 否 |
宋九 | 不會 | 不會 | 低 | 否 |
那好,現在有一個新的求職者的面試記錄
姓名 | PYTHON | 機器學習 | 數學 | 錄取 |
---|---|---|---|---|
朱十 | 不會 | 會 | 低 | ? |
現在的問題是,該不該錄取宋九?
決策樹就是用來解決這類問題的。
比如,我們可以這樣思考。
這是流程圖,我們大概都是這樣思考問題的。
翻譯成決策樹如下圖所示:
這裏需要注意兩個重要的概念。
內部節點
上圖中菱形表示的都是內部節點,內部節點用來表示特徵或者屬性。
機器學習、數學、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, 說明這個人的能力很強,絕對可以完成任務
我們用熵來定義不確定性。
熵的公式如下
如果 P 只有 0 或者 1 兩種取值的話。
熵的結果都是 0.
熵等於 0 的意思是,百分百肯定,沒有什麼不確定的。
下次你再聽到別人說:“我早就知道你肯定不行”
這個時候,你要在心裏翻譯過來,他對你建立了一個判斷模型,這個模型中他認爲熵幾乎爲 0,沒有什麼不確定性,他看死你了。
下面再講條件熵。
對比之前的條件概率,我們可以很容易理解。
條件熵H(Y|X)是衡量在隨機變量X已經確定的條件下,Y取值的不確定性。
可以這麼理解。
假設隨機變量 X 表示面試者的 Python 等級,取值有會和不會兩種。
隨機變量 Y 表示最終的錄取結果,有錄取和淘汰兩種。
那麼,H(Y|X) 就是已知面試者的 Python 等級,求面試者最終錄取結果的不確定性。
公式如下:
信息增益(information gain)
有了熵和條件熵還不夠,我們的目的是減少熵,爲此引入了信息增益。
上面 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 人。
表示某一類別, 該類別下的樣本數量。
比如代表錄取的人,錄取的人數是 2 個,代表淘汰的人,淘汰的人數是 7 個。
所以
經驗條件熵也有公式
公式可能比較複雜,但是還是比較容易理解的。
A 指代某種特徵,A 將 劃分了不同的子集, 是某一個子集。 是對應的子集中樣本的數量。
比如按照Python 這個特徵,可以將 D 劃分爲 D1,D2 兩個子集,D1 代表會,D2 代表不會。兩者的數量分別爲 4 和 5。
表示 Di 子集中,屬於類別 的集合。
比如會 Python 的人中,最終被錄取的那些人。
下面求Python這一特徵的經驗條件熵,設 Python 爲 特徵 A1.
有了和之後,就可以求信息增益了
增益爲 0.002 ,這代表着以 Python 爲特徵劃分數據集 D,對於減少分類不確定性毫無幫助。
那麼,設機器學習爲 A2,數學爲 A3,按照同樣的結果,它們的信息增益分別是:
按照信息增益,機器學習應該就是最關鍵的特徵。
但是,信息增益 有個缺點,就是結果容易偏向樣本多的特徵。
因此,除了信息增益外還有個信息增益比.
定義如下
其中,
我們也可以按照公式來計算,每個特徵的信息增益比。
可以看到,仍然說明了機器學習是錄取判斷中的關鍵特徵。
特徵的選取是遞歸進行的,先選取最優的特徵,然後用同樣的方法選取次優的特徵,直到滿足預設的條件。
常見的有 2 種算法,ID3 和 C4.5。
ID3 是以信息增益爲選擇依據,C4.5 以信息增益比爲算法依據。
後續的博文將詳細講解它們的算法實踐過程。