獨家 | 手把手教你推導決策樹算法

作者:Arun Mohan

翻譯:楊毅遠

校對:王琦

本文長度爲2000字,建議閱讀5分鐘

本文爲大家介紹了機器學習中常用的決策樹算法以及相關術語,並基於天氣數據集進行決策樹算法(ID3、CART算法)實現過程的手動推導。

標籤:機器學習

決策樹是最重要的機器學習算法之一,其可被用於分類和迴歸問題。本文中,我們將介紹分類部分。

什麼是決策樹?

決策樹(Decision Tree)是一個具有樹形結構的分類和預測工具,其中的每個內部節點表示對屬性的測試,每個分支代表測試的結果,並且每個葉子節點(終端節點)都有一個類別標籤。

上圖是一個小型決策樹。決策樹的一個重要優勢在於其高度的可解釋性。在上圖中,如果身高大於180釐米或身高小於180釐米且體重大於 80公斤爲男性,否則爲女性。你是否思考過我們如何得到類似於上圖的決策樹,下面我將使用天氣數據集對此進行解釋。

 

在此之前,我將解釋一下相關的術語。

 

  • 熵(Entropy)

在機器學習中,熵是對正在處理的信息中隨機性的一種度量。熵越高,從該信息得出結論就越難。

  • 信息增益(Information Gain)

信息增益可以定義爲隨機變量或信號通過觀察另一個隨機變量所獲得的信息量,其可以被視爲父節點的熵與子節點的加權平均熵的差。

  • 基尼不純度(Gini Impurity)

基尼不純度是一種度量方法,如果數據是根據子集中標籤的分佈被隨機標記的,則基尼不純度用來度量從集合中隨機選擇的數據被不正確標記的頻率。

基尼不純度的下界爲0,如果數據集僅包含一個類別,那麼基尼不純度則爲0。

有很多算法可以構建決策樹。它們分別是:

1. CART(Classification and Regression Trees):使用基尼不純度作爲度量標準;

2. ID3(Iterative Dichotomiser 3):使用熵和信息增益作爲度量標準。

本文將介紹ID3算法。一旦理解ID3後,就可以輕鬆地使用CART實現相同的功能。

 

使用ID3算法進行分類

下面,我們基於天氣數據集來確定是否踢足球。

這裏,自變量將決定因變量。其中,自變量是天氣預報(outlook),溫度(Temperature),溼度(Humidity)和風力(Wind),因變量是是否踢足球(Played football(yes/no))。

 

第一步,我們必須爲決策樹找到父節點。爲此,有以下步驟:

1. 計算類別變量(即因變量)的熵。

 

E(S) = -[(9/14)log(9/14) + (5/14)log(5/14)] = 0.94

 

注意:這裏通常將對數的底數設置爲2。這裏共有14個“yes/no”。其中有9個是“y

es”,5個“no”。在此基礎上,我們計算出了上面的概率。

 

從上面天氣預報(outlook)的數據中,我們可以輕鬆得到下表:

2. 現在我們需要計算加權平均熵,即我們已經計算出的每個特徵的權重總和乘以概率。

 

E(S, outlook) = (5/14)*E(3,2) + (4/14)*E(4,0) + (5/14)*E(2,3) = (5/14)(-(3/5)log(3/5)-(2/5)log(2/5))+ (4/14)(0) + (5/14)((2/5)log(2/5)-(3/5)log(3/5)) = 0.693

 

下一步是計算信息增益,它是上面我們計算的父節點的熵與加權平均熵之間的差。

 

IG(S, outlook) = 0.94 - 0.693 = 0.247

 

類似地,計算溫度(Temperature)、溼度(Humidity)和風力(Wind)的信息增益。

 

IG(S, Temperature) = 0.940 - 0.911 = 0.029

IG(S, Humidity) = 0.940 - 0.788 = 0.152

IG(S, Windy) = 0.940 - 0.8932 = 0.048

 

現在選擇具有最大熵增益的特徵。天氣預報(outlook)特徵是有最大熵增益的特徵,因此它構成了決策樹的第一個節點(根節點)。

 

現在我們的數據如下所示:

由於在天氣預報(Outlook)特徵爲多雲(overcast)時,因變量的結果僅僅有“Yes”這一種類別,因此我們可以將其設置爲“Yes”。這意味着如果天氣預報(outlook)特徵爲多雲(overcast),我們就可以踢足球。現在我們的決策樹如下所示。

接下來是在決策樹中找到下一個節點。我們在晴天(sunny)下找一個節點。我們需確定在溫度(Temperature)、溼度(Humidity)或風力(Wind)中誰有更高的信息增益。

計算父節點晴天(sunny)的熵E(sunny):

 

E(sunny) = (-(3/5)log(3/5)-(2/5)log(2/5)) = 0.971

 

計算溫度(Temperature)的信息增益IG(sunny, Temperature

E(sunny, Temperature) = (2/5)*E(0,2) + (2/5)*E(1,1) + (1/5)*E(1,0)=2/5=0.4

 

現在計算信息增益:

 

IG(sunny, Temperature) = 0.971–0.4 =0.571

 

類似地,我們可以得到:

 

IG(sunny, Humidity) = 0.971

IG(sunny, Windy) = 0.020

 

這裏的IG(sunny, Humidity)是最大值。因此,溼度(Humidity)是晴天(sunny)的子節點。

對於上表中的溼度(Humidity),如果溼度正常(normal),則因變量爲“Yes”;如果溼度高(high),則因變量爲“No”。與上面方法類似,我們可以找到下雨(Rain)的子節點。

 

注意:熵大於0的分支需要進一步拆分。

 

最終,我們可以得到如下的決策樹:

使用CART算法進行分類

使用CART進行分類的過程與ID3算法類似,但是其使用基尼不純度來替代熵作爲度量標準。

 

1. 第一步我們需找到決策樹的根節點,爲此需計算因變量的基尼不純度。

 

Gini(S) = 1 - [(9/14)² + (5/14)²] = 0.4591

 

2. 下一步,我們將計算基尼增益(Gini Gain)。

首先,我們要找到天氣預報(Outlook)、溫度(Temperature)、溼度(Humidity)和風力(Wind)的加權平均基尼不純度。

 

首先考慮天氣預報(Outlook):

Gini(S, outlook) = (5/14)gini(3,2) + (4/14)*gini(4,0)+ (5/14)*gini(2,3) = (5/14)(1 - (3/5)² - (2/5)²) + (4/14)*0 + (5/14)(1 - (2/5)² - (3/5)²)= 0.171+0+0.171 = 0.342

Gini gain (S, outlook) = 0.459 - 0.342 = 0.117

Gini gain (S, Temperature) = 0.459 - 0.4405 = 0.0185

Gini gain (S, Humidity) = 0.459 - 0.3674 = 0.0916

Gini gain(S, windy) = 0.459 - 0.4286 = 0.0304

 

我們需要選擇一個具有最高基尼增益的特徵,天氣預報(outlook)的基尼增益最高,因此我們可以選擇它作爲我們的根節點。

 

現在,你應該知道了如何進行接下來的操作,即重複我們在ID3算法中的相同步驟。

 

決策樹的優缺點

優點:

  1. 決策樹具有高度可解釋性;

  2. 需要很少的數據預處理;

  3. 適用於低延遲應用。

缺點:

  1. 很可能對噪聲數據產生過擬合。決策樹越深,由噪聲產生過擬合的可能性就越大。一種解決方案是對決策樹進行剪枝。

參考:

1. https://www.saedsayad.com/decision_tree.htm

2. Applied-ai course

原文標題:

Decision Tree Algorithm With Hands On Example

原文鏈接:

https://medium.com/datadriveninvestor/decision-tree-algorithm-with-hands-on-example-e6c2afb40d38

編輯:黃繼彥

校對:林亦霖


招聘信息

崗位: 開發運維工程師


職能:研發團隊支持——配合多個研發組,搭建、維護、優化Jenkins、禪道、數據庫、大數據平臺等,開發、支持持續集成(CI-CD)腳本和流程、軟件發佈管理,提高各個研發組的開發效率。深入研究運維相關技術以及新型軟硬件技術,包括運維自動化技術,虛擬化技術,監控技術,網絡技術等。對外提供數爲軟件系統的雲服務和培訓服務設施等。


招聘要求:本科學歷、帶有大數據系統(Hadoop、Kafka、ES、MongoDB、Jenkins等)使用經歷


入職單位: 清華大學軟件學院 大數據系統軟件國家工程實驗室 (工作地點:雙清大廈)


簡歷投遞地址:[email protected]
招聘日期:即日起至2020年7月16日


如您想與我們保持交流探討、持續獲得數據科學領域相關動態,包括大數據技術類、行業前沿應用、講座論壇活動信息、各種活動福利等內容,敬請掃碼加入數據派THU粉絲交流羣,紅數點恭候各位。

譯者簡介

楊毅遠,清華大學自動化系研一在讀,本科畢業於華中科技大學自動化學院實驗班,研究方向爲工業過程檢測中的AI算法。喜歡唱歌、喜歡接觸新鮮事物的我對於“AI+”格外感興趣;入門CV和數據挖掘的我,希望接觸到更多非自己研究領域內的事物,拓寬自己的知識圈。

翻譯組招募信息

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景爲志願者帶來好的發展機遇。

其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成爲你在翻譯小組的夥伴。

點擊文末“閱讀原文”加入數據派團隊~

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:DatapiTHU),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公衆號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。

發佈後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。

點擊“閱讀原文”擁抱組織

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