作者:韓信子@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}\),則資訊熵的計算公式如下:
但\(p_{k}\)取值為1的時候,資訊熵為0(很顯然這時候概率1表示確定事件,沒有任何不確定性);而當\(p_{k}\)是均勻分佈的時候,資訊熵取最大值\(\log(|y|)\)(此時所有候選同等概率,不確定性最大)。
(2)資訊增益
大家對資訊熵有了解後,我們就可以進一步瞭解資訊增益(Information Gain),它衡量的是我們選擇某個屬性進行劃分時資訊熵的變化(可以理解為基於這個規則劃分,不確定性降低的程度)。
資訊增益描述了一個特徵帶來的資訊量的多少。在決策樹分類問題中,資訊增益就是決策樹在進行屬性選擇劃分前和劃分後的資訊差值。典型的決策樹演算法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就是使用它作為劃分屬性挑選的原則。
資訊增益率的計算細節如下所示:
數學上用於資訊量(或者純度)衡量的不止有上述的熵相關的定義,我們還可以使用基尼指數來表示資料集的不純度。基尼指數越大,表示資料集越不純。
基尼指數(Gini Index)的詳細計算方式如下所示:
其中,\(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·完整版)
ShowMeAI相關文章推薦
- 1.機器學習基礎知識
- 2.模型評估方法與準則
- 3.KNN演算法及其應用
- 4.邏輯迴歸演算法詳解
- 5.樸素貝葉斯演算法詳解
- 6.決策樹模型詳解
- 7.隨機森林分類模型詳解
- 8.迴歸樹模型詳解
- 9.GBDT模型詳解
- 10.XGBoost模型最全解析
- 11.LightGBM模型詳解
- 12.支援向量機模型詳解
- 13.聚類演算法詳解
- 14.PCA降維演算法詳解