-
簡介
基於樹的學習算法被認為是最好的和最常用的監督學習方法之一。 基於樹的方法賦予預測模型高精度,穩定性和易於解釋的能力。 與線性模型不同,它們非常好地映射非線性關系。 它們適用於解決手頭的任何問題(分類或回歸)。決策樹,隨機森林,梯度增強等方法正在各種數據科學問題中廣泛使用。 因此,對於每個分析師學習這些算法並將其用於建模非常重要。本文的目的是介紹決策樹學習的基本理論基礎,並提出ID3算法。
什么是決策樹?
簡而言之,決策樹是一棵樹,其中每個分支節點代表多個備選方案之間的選擇,每個葉節點代表一個決策。它是一種監督學習算法,主要用於分類問題,適用於分類和連續輸入和輸出變量。 是歸納推理的最廣泛使用和實用的方法之一(歸納推理是從具體例子中得出一般結論的過程)。決策樹從給定的例子中學習和訓練數據,並預測不可見的情況。
決策樹的圖形表示可以是:
有幾種算法可以構建決策樹,其中一些是:
- CART(分類和回歸樹):使用基尼指數作為度量。
- ID3算法:使用熵函數和信息增益作為度量。
在本文中,我們將重點關注ID3算法。
與決策樹相關的重要術語
基本術語:
- 根節點(Root Node):它代表整個種群或樣本,並進一步分為兩個或更多個同類集。
- 拆分(Splitting):這是將節點划分為兩個或更多個子節點的過程。
- 決策節點(Decision Node):當子節點分裂成更多的子節點時,它被稱為決策節點。
- 葉子/終端節點(Leaf/ Terminal Node):不分割的節點稱為葉子或終端節點。
- 修剪(Pruning):當我們刪除決策節點的子節點時,此過程稱為修剪。 你可以說相反的分裂過程。
- 分支/子樹(Branch / Sub-Tree):整個樹的子部分稱為分支或子樹。
- 父節點和子節點(Parent and Child Node):划分為子節點的節點稱為子節點的父節點,其中子節點是父節點的子節點。
分類VS回歸
當因變量是連續的時,使用回歸樹。因變量是分類時使用分類樹。
- 在回歸樹的情況下,訓練數據中終端節點獲得的值是落在該區域中的觀測的平均值。因此,如果看不見的數據觀觀測屬於該區域,我們將使用平均值進行預測。
- 在分類樹的情況下,終端節點在訓練數據中獲得的值(類)是落在該區域中的觀察模式。因此,如果看不見的數據觀察屬於該區域,我們將使用模式值進行預測。
兩棵樹都將預測空間(自變量)划分為不同的和不重疊的區域。為簡單起見,您可以將這些區域視為框。
這兩棵樹都遵循自上而下的貪婪方法,稱為遞歸二進制分裂。我們將其稱為“自上而下”,因為當所有觀察在單個區域中可用時,它從樹的頂部開始,並且連續地將預測器空間分成樹下的兩個新分支。它被稱為“貪婪”,因為該算法只關注當前分裂的關鍵(尋找最佳可用變量),而不關心將來會導致更好樹的分裂。繼續該拆分過程,直到達到用戶定義的停止標准。例如:一旦每個節點的觀測數量小於50,我們就可以告訴算法停止。
在這兩種情況下,分裂過程都會導致樹木完全生長,直到達到停止標准。但是,完全成長的樹可能會過度填充數據,導致看不見的數據的准確性很差。這帶來了'修剪'。修剪是用於解決過度擬合的技術之一。
優點
- 易於理解:即使對於非分析背景的人來說,決策樹輸出也很容易理解。它不需要任何統計知識來閱讀和解釋它們。它的圖形表示非常直觀。
- 在數據探索中很有用:決策樹是識別最重要變量和兩個或多個變量之間關系的最快方法之一。在決策樹的幫助下,我們可以創建具有更好預測目標變量能力的新變量(特征)。你可以參考一篇文章(Trick to enhance power of regression model)。它也可以用於數據探索階段。例如,我們正在研究一個問題,即我們有數百個變量可用的信息,決策樹將有助於識別最重要的變量。
- 需要更少的數據清理:與其他一些建模技術相比,它需要更少的數據清理。它不受異常值和缺失值的影響。
- 數據類型不是約束:它可以處理數字和分類變量。
- 非參數方法:決策樹被認為是非參數方法。這意味着決策樹沒有關於空間分布和分類器結構的假設。
缺點
- 過擬合:過擬合是決策樹模型最實用的難點之一。 通過設置模型參數和修剪的約束來解決這個問題。
- 不適合連續變量:在處理連續數值變量時,決策樹在對不同類別的變量進行分類時會丟失信息。
ID3算法
ID3代表Iterative Dichotomizer 3。ID3算法由Ross Quinlan發明。 它從一組固定的實例構建決策樹,結果樹用於對測試樣本進行分類。基本思想是通過在給定集合中使用自上而下的貪婪搜索來構造決策樹,以測試每個樹節點處的每個屬性。決策樹的構造是作為重復過程完成的,估計哪個變量可以獲得最大的信息增益。信息增益是當已知自變量的狀態時因變量的熵的減少。從本質上講,當我們根據因變量的值將它分成組時,它會測量獨立變量的組織程度。選擇提供組織最大增加的因變量,並根據此變量拆分數據集。
信息熵(Entropy)
在信息論中,熵是衡量消息來源不確定性的指標。 它為我們提供了數據中的無組織程度。
給定集合S包含某些目標概念的正面和負面示例,S相對於此布爾分類的熵是:
這里,p +和p-是S中正負例子的比例。
考慮相對於布爾分類(即二分類)的這種熵函數,因為正例p +的比例在0和1之間變化。
假設S是14個例子的集合,包括9個正例和5個負例子[9 +,5-]。 然后S的熵是:
請注意,如果S的所有成員屬於同一個類,則熵為0。 例如,如果所有成員都是正數(p + = 1),則p-為0,並且
Entropy(S)= -1* log2(1) - 0.*log2 0 = -1. 0 - 0. log2 0 = 0。
當集合包含相同數量的正面和負面示例時,熵為1。
如果集合包含不等數量的正面和負面示例,則熵在0和1之間。
信息增益(Information Gain)
它衡量預期的熵減少。 它決定哪個屬性進入決策節點。 為了最小化決策樹深度,具有最多熵減少的屬性是最佳選擇!更確切地說,屬性A相對於示例集合S的信息增益增益(S,A)被定義為:
- S =屬性A的所有可能值的每個值v
- Sv =屬性A具有值v的S的子集
- | SV| = Sv中的元素數
- | S | = S中的元素數
具體例子
假設我們想要ID3來決定天氣是否適合打棒球。 在兩周的時間內,收集數據以幫助ID3構建決策樹。 目標分類是“我們應該打棒球嗎?”,可以是或不是。
天氣屬性是 outlook, temperature, humidity, and wind speed.。
-
outlook = { sunny, overcast, rain }
-
temperature = {hot, mild, cool }
-
humidity = { high, normal }
-
wind = { weak, strong }
我們需要找到哪個屬性將成為決策樹中的根節點。
計算數據集上最高信息增益的步驟
1.計算整個數據集的熵
14個記錄,9個yes,5個No
- Entropy(S) = – (9/14) Log2 (9/14) – (5/14) Log2 (5/14) = 0.940
2.計算每個屬性熵
2.1 - outlook
outlook屬性包含三個 不同的觀測:
- outlook = { sunny, overcast, rain }
-
- overcast: 4 個記錄, 4 個 “yes”
- rainy: 5 個記錄, 3 個 “yes”
-
-
sunny: 5 個幾率, 2 個“yes”
- 預期的新熵:
-
2.2 - temperature
預期的新熵:
2.3 - humidity
預期的新熵:
2.4 - windy
預期的新熵:
3.信息增益
顯然,outlook屬性的增益最高。 因此,它用作根節點。
由於outlook有三個可能的值,因此根節點有三個分支( sunny, overcast, rain )。 接下來的問題是,應該在sunny分支節點測試什么屬性? 由於我們在根部使用了outlook,我們只決定其余三個屬性: temperature, humidity, and wind。
-
Ssunny = {D1, D2, D8, D9, D11} = 5 examples from the table with outlook = sunny
-
Gain(Ssunny, Humidity) = 0.970
-
Gain(Ssunny, Temperature) = 0.570
-
Gain(Ssunny, Wind) = 0.019
humidity,增益最大; 因此,它被用作決策節點。 這個過程一直持續到所有數據都被完美分類或者我們的屬性用完了.
決策樹也可以用規則格式表示:
- IF outlook = sunny AND humidity = high THEN play baseball = no
- IF outlook = rain AND humidity = high THEN play baseball = no
- IF outlook = rain AND wind = strong THEN play baseball = yes
-
IF outlook = overcast THEN play baseball = yes
- IF outlook = rain AND wind = weak THEN play baseball = yes
最終會生成一顆像下邊一樣的樹: