圖解機器學習 | 決策樹模型詳解

ShowMeAI發表於2022-03-10

在這裡插入圖片描述

作者:韓信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/34
本文地址http://www.showmeai.tech/article-detail/190
宣告:版權所有,轉載請聯絡平臺與作者並註明出處


引言

決策樹(Decision Tree)是機器學習中一種經典的分類與迴歸演算法。在本篇中我們討論用於分類的決策樹的原理知識。決策樹模型呈樹形結構,在分類問題中,一顆決策樹可以視作 if-then 規則的集合。模型具有可讀性,分類速度快的特點,在各種實際業務建模過程中廣泛使用。

(本篇內容會涉及到不少機器學習基礎知識,沒有先序知識儲備的寶寶可以檢視ShowMeAI的文章 圖解機器學習 | 機器學習基礎知識

1.決策樹演算法核心思想

1)決策樹結構與核心思想

決策樹(Decision tree)是基於已知各種情況(特徵取值)的基礎上,通過構建樹型決策結構來進行分析的一種方式,是常用的有監督的分類演算法。

決策樹模型(Decision Tree model)模擬人類決策過程。以買衣服為例,一個顧客在商店買褲子,於是有了下面的對話:

決策樹是一種預測模型,代表的是物件屬性與物件值之間的對映關係。決策樹是一種樹形結構,其中:

  • 每個內部結點表示一個屬性的測試
  • 每個分支表示一個測試輸出
  • 每個葉結點代表一種類別

如上圖買衣服的例子,第一個「內部結點」對應於屬性「材料」上的測試,兩個分支分別是該屬性取值為「牛仔」和「非牛仔」兩種可能結果。當取值為「牛仔」時,則對下個屬性「褲型」進行測試;若取值為「非牛仔」時,則對應於「葉結點」——「不買」。

決策樹模型核心是下面幾部分:

  • 結點和有向邊組成。
  • 結點有內部結點和葉結點倆種型別。
  • 內部結點表示一個特徵,葉結點表示一個類。

2)決策樹的發展史

決策樹在發展過程中,有過很多不同型別的模型,典型的模型如ID3、C4.5和CART等,下面我們來簡單介紹一下發展史中不同的模型。

2.決策樹生長與最優屬性的選擇

上面介紹的決策樹發展史裡,大家對於不同的決策樹模型有一個基礎的理解了,下面一部分,我們來一起看一下決策樹是如何生長構成的。

1)決策樹生長流程

決策樹的決策過程就是從根結點開始,測試待分類項中對應的特徵屬性,並按照其值選擇輸出分支,直到葉子結點,將葉子結點的存放的類別作為決策結果。簡單說來,決策樹的總體流程是自根至葉的遞迴過程,在每個中間結點尋找一個「劃分」(split or test)屬性

如下圖的虛擬碼,是詳細的決策樹生長(構建)流程。大家可以特別注意圖中3類終止條件和返回的結果,而整個流程中,有非常核心的一步是「最優劃分屬性的選擇」。

決策樹停止生長的三個條件:

2)最優屬性選擇

下面我們來看看,決策樹的最優劃分屬性選擇,是怎麼做的。

(1)資訊熵

要了解決策樹的「最優屬性」選擇,我們需要先了解一個資訊理論的概念「資訊熵(entropy)」(相關知識可以參考ShowMeAI文章 圖解AI數學基礎 | 資訊理論),它是消除不確定性所需資訊量的度量,也是未知事件可能含有的資訊量,可以度量樣本集合「純度」。

對應到機器學習中,假定當前資料集\(D\)中有\(y\)類,其中第\(k\)類樣本佔比為\(p_{k}\),則資訊熵的計算公式如下:

\[Ent(D) = -\sum_{K=1}^{\left | y \right | } p_{k} \log_{2}{p_{k}} \]

\(p_{k}\)取值為1的時候,資訊熵為0(很顯然這時候概率1表示確定事件,沒有任何不確定性);而當\(p_{k}\)是均勻分佈的時候,資訊熵取最大值\(\log(|y|)\)(此時所有候選同等概率,不確定性最大)。

(2)資訊增益

大家對資訊熵有了解後,我們就可以進一步瞭解資訊增益(Information Gain),它衡量的是我們選擇某個屬性進行劃分時資訊熵的變化(可以理解為基於這個規則劃分,不確定性降低的程度)。

\[\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{v} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \]

資訊增益描述了一個特徵帶來的資訊量的多少。在決策樹分類問題中,資訊增益就是決策樹在進行屬性選擇劃分前和劃分後的資訊差值。典型的決策樹演算法ID3就是基於資訊增益來挑選每一節點分支用於劃分的屬性(特徵)的。

這裡以西瓜資料集為例。

  • 資料集分為好瓜、壞瓜,所以 \(|y|=2\)
  • 根結點包含17個訓練樣例,其中好瓜共計8個樣例,所佔比例為8/17。
  • 壞瓜共計9個樣例,所佔比例為9/17。

將資料帶入資訊熵公式,即可得到根結點的資訊熵。

以屬性「色澤」為例,其對應的3個資料子集:

  • \(D1(色澤=青綠)\),包含{1,4,6,10,13,17},6個樣例,其中好瓜樣例為\(\left \{ 1,4,6 \right \}\),比例為3/6,壞瓜樣例為\(\left \{ 10,13,17 \right \}\),比例為3/6。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

  • \(D2(色澤=烏黑)\),包含\(\left \{ 2,3,7,8,9,15 \right \}\),6個樣例,其中好瓜樣例為\(\left \{ 2,3,7,8 \right \}\),比例為4/6,壞瓜樣例為\(\left \{ 9,15 \right \}\),比例為2/6。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

  • \(D3(色澤=淺白)\),包含\(\left \{ 5,11,12,14,16 \right \}\),5個樣例,其中好瓜樣例為\(\left \{ 5 \right \}\),比例為1/5,壞瓜樣例為\(\left \{ 11,12,14,16 \right \}\),比例為4/5。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

色澤屬性的資訊增益為:

同樣的方法,計算其他屬性的資訊增益為:

對比不同屬性,我們發現「紋理」資訊增益最大,其被選為劃分屬性:清晰\(\left \{ 1,2,3,4,5,6,8,10,15 \right \}\)、稍糊\(\left \{ 7,9,13,14,17 \right \}\)、模糊\(\left \{ 11,12,16 \right \}\)

再往下一步,我們看看「紋理」=「清晰」的節點分支,該節點包含的樣例集合D1中有編號為\(\left \{ 1,2,3,4,5,6,8,10,15 \right \}\)共計9個樣例,可用屬性集合為\(\left \{ 色澤,根蒂,敲聲,臍部,觸感 \right \}\)(此時「紋理」不再作為劃分屬性),我們同樣的方式再計算各屬性的資訊增益為:

從上圖可以看出「根蒂」、「臍部」、「觸感」3個屬性均取得了最大的資訊增益,可用任選其一作為劃分屬性。同理,對每個分支結點進行類似操作,即可得到最終的決策樹。

(3)資訊增益率(Gain Ratio)

大家已經瞭解了資訊增益作為特徵選擇的方法,但資訊增益有一個問題,它偏向取值較多的特徵。原因是,當特徵的取值較多時,根據此特徵劃分更容易得到純度更高的子集,因此劃分之後的熵更低,由於劃分前的熵是一定的。因此資訊增益更大,因此資訊增益比較偏向取值較多的特徵。

那有沒有解決這個小問題的方法呢?有的,這就是我們要提到資訊增益率(Gain Ratio),資訊增益率相比資訊增益,多了一個衡量本身屬性的分散程度的部分作為分母,而著名的決策樹演算法C4.5就是使用它作為劃分屬性挑選的原則。

資訊增益率的計算細節如下所示:

\[\operatorname{Gain}_{-} \operatorname{ratio}(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} \]

\[IV(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} \]

數學上用於資訊量(或者純度)衡量的不止有上述的熵相關的定義,我們還可以使用基尼指數來表示資料集的不純度。基尼指數越大,表示資料集越不純。

基尼指數(Gini Index)的詳細計算方式如下所示:

\[\operatorname{Gini}(D)=\sum_{k=1}^{|y|} \sum_{k \prime \neq k} p_{k} p_{k^{\prime}}=1-\sum_{k=1}^{|y|} p_{k}^{2} \]

其中,\(p_k\)表示第\(k\)類的資料佔總資料的比例,著名的決策樹演算法CART就是使用基尼指數來進行劃分屬性的挑選(當然,CART本身是二叉樹結構,這一點和上述的ID3和C4.5不太一樣)。

對於基尼指數的一種理解方式是,之所以它可以用作純度的度量,大家可以想象在一個漆黑的袋裡摸球,有不同顏色的球,其中第k類佔比記作\(p_k\),那兩次摸到的球都是第k類的概率就是\(p_k^2\),那兩次摸到的球顏色不一致的概率就是\(1-Σp_k^2\),它的取值越小,兩次摸球顏色不一致的概率就越小,純度就越高。

3.過擬合與剪枝

如果我們讓決策樹一直生長,最後得到的決策樹可能很龐大,而且因為對原始資料學習得過於充分會有過擬合的問題。緩解決策樹過擬合可以通過剪枝操作完成。而剪枝方式又可以分為:預剪枝和後剪枝。

1)決策樹與剪枝操作

為了儘可能正確分類訓練樣本,有可能造成分支過多,造成過擬合。過擬合是指訓練集上表現很好,但是在測試集上表現很差,泛化效能差。可以通過剪枝主動去掉一些分支來降低過擬合的風險,並使用「留出法」進行評估剪枝前後決策樹的優劣

基本策略包含「預剪枝」和「後剪枝」兩個:

  • 預剪枝pre-pruning):在決策樹生長過程中,對每個結點在劃分前進行估計,若當前結點的劃分不能帶來決策樹泛化效能的提升,則停止劃分並將當前結點標記為葉結點。

  • 後剪枝post-pruning):先從訓練集生成一顆完整的決策樹,然後自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化效能的提升,則將該子樹替換為葉結點。

2)預剪枝與後剪枝案例

我們來看一個例子,下面的資料集,為了評價決策樹模型的表現,會劃分出一部分資料作為驗證集。

在上述西瓜資料集上生成的一顆完整的決策樹,如下圖所示。

(1)預剪枝

「預剪枝」過程如下:將其標記為葉結點,類別標記為訓練樣例中最多的類別。

  • 若選「好瓜」,驗證集中{4,5,8}被分類正確,得到驗證集精度為3/7x100%=42.9%

  • 根據結點②③④的訓練樣例,將這3個結點分別標記為「好瓜」、「好瓜」、「壞瓜」。此時,驗證集中編號為{4,5,8,11,12}的樣例被劃分正確,驗證集精度為5/7x100%=71.4%

    • 結點2(好瓜):分類正確:{4,5},分類錯誤:{13}
    • 結點3(好瓜):分類正確:{8},分類錯誤:{9}
    • 結點4(壞瓜):分類正確:{11,12}

若劃分後的驗證集精度下降,則拒絕劃分。對結點②③④分別進行剪枝判斷,結點②③都禁止劃分,結點④本身為葉子結點。

根據預剪枝方法,此處生成了一層決策樹。這種最終得到僅有一層劃分的決策樹,稱為「決策樹樁」(decision stump)。

(2)後剪枝

我們在生成的完整決策樹上進行「後剪枝」:

  • 用驗證集的資料對該決策樹進行評估,樣例\(\left \{4,11,12 \right \}\)分類正確,而樣例\(\left \{5,8,9,13 \right \}\)分類錯誤,此時的精度為42.9%。

  • 當對該決策樹進行後剪枝,結點⑥的標記為好瓜,此時樣例\(\left \{4,8,11,12 \right \}\)分類正確,樣例\(\left \{5,9,13 \right \}\)分類錯誤,精度為57.1%。

剪枝後的精度提升了,因此該決策樹需要在結點⑥處進行剪枝。

考慮結點⑤,若將其替換為葉結點,根據落在其上的訓練樣例\(\left \{ 6,7,15 \right \}\)將其標記為「好瓜」,測得驗證集精度仍為57.1%,可以不剪枝。

考慮結點②,若將其替換為葉結點,根據落在其上的訓練樣例\(\left \{ 1,2,3,14 \right \}\)將其標記為「好瓜」,測得驗證集精度提升至71.4%,決定剪枝。

對結點③和①,若將其子樹替換為葉結點,則所得決策樹的驗證集精度分佈為71.4%和42.9%,均未提高,所以不剪枝。得到最終後剪枝之後的決策樹。

3)預剪枝與後剪枝的特點

時間開銷

  • 預剪枝:訓練時間開銷降低,測試時間開銷降低。
  • 後剪枝:訓練時間開銷增加,測試時間開銷降低。

過/欠擬合風險

  • 預剪枝:過擬合風險降低,欠擬合風險增加。
  • 後剪枝:過擬合風險降低,欠擬合風險基本不變。

泛化效能:後剪枝通常優於預剪枝。

4.連續值與缺失值的處理

1)連續值處理

我們用於學習的資料包含了連續值特徵和離散值特徵,之前的例子中使用的都是離散值屬性(特徵),決策樹當然也能處理連續值屬性,我們來看看它的處理方式。

對於離散取值的特徵,決策樹的劃分方式是:選取一個最合適的特徵屬性,然後將集合按照這個特徵屬性的不同值劃分為多個子集合,並且不斷的重複這種操作的過程。

對於連續值屬性,顯然我們不能以這些離散值直接進行分散集合,否則每個連續值將會對應一種分類。那我們如何把連續值屬性參與到決策樹的建立中呢?

因為連續屬性的可取值數目不再有限,因此需要連續屬性離散化處理,常用的離散化策略是二分法,這個技術也是C4.5中採用的策略。

具體的二分法處理方式如下圖所示:

注意:與離散屬性不同,若當前結點劃分屬性為連續屬性,該屬性還可以作為其後代結點的劃分屬性。

2)缺失值處理

原始資料很多時候還會出現缺失值,決策樹演算法也能有效的處理含有缺失值的資料。使用決策樹建模時,處理缺失值需要解決2個問題:

  • Q1:如何進行劃分屬性選擇

  • Q2:給定劃分屬性,若樣本在該屬性上的值缺失,如何進行劃分

缺失值處理的基本思路是:樣本賦權,權重劃分。我們來通過下圖這份有缺失值的西瓜資料集,看看具體處理方式。

僅通過無缺失值的樣例來判斷劃分屬性的優劣,學習開始時,根結點包含樣例集 D 中全部17個樣例,權重均為1。

  • 根結點選擇「色澤」屬性時,有3個缺失值,因此樣例總數為14。

  • 此時好瓜樣例為\(\left \{2,3,4,6,7,8\right \}\),比例為6/14,壞瓜樣例為\(\left \{ 9,10,11,12,14,15,16,17 \right \}\),比例為8/14。

將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

\(\tilde{D^{1}}\)\(\tilde{D^{2}}\)\(\tilde{D^{3}}\)分別表示在屬性「色澤」上取值為「青綠」「烏黑」以及「淺白」的樣本子集:

  • \(\tilde{D^{1}} (色澤=青綠)\),包含\(\left \{ 4,6,10,17 \right \}\),4個樣例,其中好瓜樣例為\(\left \{ 4,6 \right \}\),比例為2/4,壞瓜樣例為\(\left \{ 10,17 \right \}\),比例為2/4。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

  • \(\tilde{D^{2}}(色澤=烏黑)\),包含\(\left \{ 2,3,7,8,9,15 \right \}\),6個樣例,其中好瓜樣例為\(\left \{ 2,3,7,8 \right \}\),比例為4/6,壞瓜樣例為\(\left \{ 9,15 \right \}\),比例為2/6。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

  • \(\tilde{D^{3}}(色澤=淺白)\),包含\(\left \{ 11,12,14,16 \right \}\),4個樣例,其中好瓜樣例為\(\left \{ \phi \right \}\),比例為0/5,壞瓜樣例為\(\left \{ 11,12,14,16 \right \}\),比例為4/4。將資料帶入資訊熵計算公式即可得到該結點的資訊熵。

於是,樣本集D上屬性「色澤」的資訊增益可以計算得出,Gain(D,紋理)=0.424資訊增益最大,選擇「紋理」作為接下來的劃分屬性。

更多監督學習的演算法模型總結可以檢視ShowMeAI的文章 AI知識技能速查 | 機器學習-監督學習

視訊教程

可以點選 B站 檢視視訊的【雙語字幕】版本

[video(video-Fr5j5JWy-1646890679105)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=975327190&page=12)(image-https://img-blog.csdnimg.cn/img_convert/f40f45459cc327bde1784d8398563c10.png)(title-【雙語字幕+資料下載】MIT 6.036 | 機器學習導論(2020·完整版))]

【雙語字幕+資料下載】MIT 6.036 | 機器學習導論(2020·完整版)

https://www.bilibili.com/video/BV1y44y187wN?p=12

ShowMeAI相關文章推薦

ShowMeAI系列教程推薦

相關文章