決策樹學習

**決策樹學習**（）係一系列建立決策樹嘅機械學習做法。決策樹係一種用樹狀圖做決策嘅做法。一樖決策樹會有若干個**節點**，每個節點代表一個決策點，會掕住若干條線指向下一排節點，每條線表示「如果揀咗呢個選項，就去呢個決策點」。

決策樹學習就係一系列嘅機械學習演算法。呢啲演算法會睇過往嘅數據，靠數據建立決策樹，提供以下嘅資訊：「由手上嘅數據睇，啲個案可以按邊啲變數（決策點）嚟分類呢？」建立咗決策樹之後，分析者就可以攞住樖決策樹，預測將來遇到嘅個案要點分類。呢種噉嘅技術，可以用嚟教人工智能做睇病（將病人分類做**有病**同**冇病**兩類）等嘅工作。

## 基本概念

一樖決策樹以**根節點**為起始，根節點下會有若干排**節點**，是但攞一個節點嚟睇，佢都會連住若干個**子節點**，啲子節點喺下一排。喺概念上，每一個節點都可以當係一個**決策點**，而由一個節點去佢嘅子節點嘅連繫，就可以當做「如果揀咗呢個呢個選項，世界嘅狀態就變去呢個呢個節點」。

想像下圖嗰樖英文決策樹：
*個決策者家陣想決定「好唔好去玩」（PLAY），
*喺開頭個節點，**去玩**（play）嘅價值有 9 分，**唔好去玩**（don't play）嘅價值有 5 分，
*然後**睇天氣**（OUTLOOK），如果**晴天**（sunny），噉去玩嘅價值變成 2 分，唔好去玩嘅價值變成 3 分，
*然後個決策者會睇濕度（HUMIDITY）
... 如此類推。如是者，分析者就做到將決策嘅過程圖像化噉展示出嚟，可以去（例如）將決策方法教畀啲下屬知。



## 建立方法

決策樹學習做緊嘅嘢，就係

想像而家手上有個數據庫，紀錄咗數據入面每一個個體嘅身高、體重、成績、性格（包括外向度等嘅多個特質）... 等嘅多個特性。研究者想靠呢啲數據建立一樖決策樹，將來用嚟預測啲人嘅行為。

建立決策樹嘅演算法，主要有以下呢啲。

### 資訊熵

資訊熵呢個概念，建立決策樹嘅演算法成日都會用到。資訊熵呢個概念出自資訊理論，衝量一件事「有幾大嘅不確定性喺入便」：搵一個變數嚟睇，佢會有一啲可能數值，例如「某年某月某日某刻，掟某一個銀仔」嘅可能數值大致有兩個－**公**同**字**。每個數值都會有一定機率出現，想像而家已知每一個可能數值出現嘅機率，件事件帶有嘅資訊熵（數學符號係 S）可以用以下呢條式嚟計：

:S = - \sum_{i} p_i \log_2 (p_i)
喺呢條式當中，p_i 係指第 i 個可能性發生嘅機率，而 \log_2 (p_i) 係 p_i 以 2 做基數嘅對數。用呢條式計嘅話，「掟一粒冇出千嘅銀仔」（**公**同**字**出現嘅機率都係 50%）呢件事當中帶有嘅資訊熵量（S(X)）就係：

:S(X) = - \left(\frac{1}{2}\log_2 \left(\frac{1}{2}\right) + \frac{1}{2}\log_2 \left(\frac{1}{2}\right)\right) = 1
例如一件肯定嘅事件係無資訊熵嘅——如果其中一個可能性機率係 **1**（即係其他可能性機率冚唪唥等如 **0**），資訊熵條式會出 0，而另一方面，如果每個可能性機率都一樣（不確定性最大化）嗰陣，條式畀嘅數值亦會最大化。

資訊熵可以用嚟衝量「提供到幾多資訊」——資訊熵下降反映不確定性下降。

### ID3 系

ID3（英文全名係**疊代二分器 3** 噉嘅意思）可以話係最簡單最基礎嗰款決策樹建立法，源於 1986 年。ID3 呢種演算法採用貪心搜尋——喺建立每一個節點嗰陣，呢段演算法都會睇勻晒所有可以用嚟做預測嘅變數，然後就可以想像以下噉嘅步驟：
#Input：某一個目標（想預測嘅）變數 C，同埋若干個用嚟做預測嘅變數 R；
#將 R 入便嘅變數逐個逐個攞晒來睇；
#由呢啲變數當中，揀出「最能夠提升有關 C 嘅資訊」嗰個，嗌呢個變數做 D；
#將啲個案，按照佢哋喺 D 上嘅數值分組，分做 D_1 D_2 D_3... 等；
#用 D 嚟做新嘅「根點」，D 唔再係 R 嘅一員，由 D_1 D_2 D_3... 等各「生一樖新嘅子樹」；
#同每一樖子樹，返去做步驟 2 至 5 嘅嘢（遞歸）。
舉個實際應用例子，想像依家要將手上嘅病人分類，數據庫入面有一個個病人個案，每個個案（1 2 3 4...）都記錄咗嗰位病人「有冇發燒」、「有冇見咳」同埋「係咪真係中咗新型流感」... 等嘅資訊。研究者跟住就叫部電腦用 ID3 建立決策樹，用嚟將啲病人分類，部電腦做嘅嘢可以想像成
#將啲可以用嚟分類嘅變數—「有冇發燒」、「有冇見咳」—逐個逐個攞嚟睇，睇吓邊個最能夠令資訊熵下降；
#例如家陣發覺「有冇發燒」係最能夠令資訊熵下降嘅，將班病人按「有冇發燒」嚟分做兩大組；
#同每一個子節點，搵下一個可以用嚟分類嘅變數；
#一路遞歸，直至可以用嚟分類嘅變數用晒為止。
最後得出嘅決策樹，就會容許研究者作出類似噉嘅決策過程：「首先，睇吓手上嗰位病人有冇發燒；如果有發燒，就睇吓佢有冇咳，如果有...（省略）；而如果冇發燒，就睇吓佢唞氣有冇困難，如果有...（省略）」，而最後樖決策樹就會畀出「手上嗰位病人係咪中咗流感」嘅判斷。而有咗呢一樖決策樹，研究者就可以例如教 AI 做睇病嘅工作。

ID3 呢種演算法畀人詬病，話佢太容易受到可能數值嘅數量影響，傾向偏好一啲「有好多唔同可能數值」嘅變數——噉即係表示 ID3 成日會重用（例如）電話號碼等「個個人數值都唔同，但攞嚟分類冇咩用」嘅變數。呢點喺某啲應用上會造成問題，而 C4.5（同埋及後嘅 C5.0）可以算係 ID3 嘅延伸版本，針對 ID3 嘅呢種漏洞嚟進行改良。

### CART
**CART** 係另一種廿一世紀初常用嘅決策樹建立法，只能夠用嚟建立二元嘅決策樹。「二元」意思係指 CART 整出嚟嘅決策樹喺每個節點只有兩個可能選擇，唔似得 C5.0 噉可以一個節點有三個或者以上嘅選擇：例如 CART 只能夠將溫度分做凍同熱（切割點可能係攝氏 20 度），而 C5.0 整出嚟嘅決策樹就有可能將溫度分做凍、暖同熱（切割點可能係例如攝氏 30 度同攝氏 10 度）——唔係二元咁簡單。

CART 個做法同 ID3 相關嘅演算法好相似，都係有一個目標（要預測嘅）變數，同埋一拃用嚟做預測嘅變數。段演算法會有準則決定「呢步要用邊一個預測變數嚟將啲個案分割」，然後遞歸式噉做，最後出到一樖決策樹。CART 最與別不同嘅地方，係佢用另一套方法嚟衡量「要點樣選擇用嚟做分割嘅變數」—— CART 用嘅係所謂嘅**堅尼指數**：
:\text{Gin nei} = 1 - \sum_{i=1}^c (p_i)^2
籠統啲噉講，堅尼指數可以想像成係量度緊「純潔度」，數值係越低越好。詳細啲講：如果某個樣本入便淨係得某個可能性嘅發生機率係 1（其他可能性嘅發生機率冚唪唥都係 0）堅尼指數就會去到 0 呢個最細數值。

## 注意事項

用決策樹分析數據有好多好處：首先呢種分析方法被指係可詮釋度高，唔似得（例如）人工神經網絡噉「無法解釋」；此外，決策樹分析彈性大，無論連續定係離散嘅變數佢都處理得到，亦處理到有缺失數據嘅 data；而且決策樹分析唔會假設啲數據跟啲乜嘢特定嘅概率分佈，就算啲數據（例如）唔跟常態分佈都用得決策樹。不過要用決策樹嚟做分析，遠遠唔只要建立樖決策樹咁簡單。事前事後都有好多嘢要諗過度過先。

決策樹嘅一個問題係，佢被指容易出現過適嘅情況：原則上，高度複雜嘅決策樹模型解釋手上數據嘅能力會勁啲，但係統計相關嘅研究表明，呢啲模型解釋將來數據嘅能力通常會較弱，想像下圖噉嘅情況——



而家研究者想分析兩個變數（圖中嘅 X 軸同 Y 軸）之間成咩關係，等自己將來可以由 X 嘅值預測 Y 嘅值；佢要做嘅係嘗試搵一條有返咁上下合乎數據（每個黑點係一個個案）嘅線，用呢條線做佢心目「兩個變數之間成咩關係」嘅模型；條線有過適嘅問題——藍色線係就係完美符合手上數據，但佢條式複雜過直線嘅好多，而實證研究顯示，條線咁複雜，解釋將來數據嘅能力通常會弱啲。

要防範過適，分析者通常會做吓剪枝 ——即係有技巧噉「將樖樹嘅其中一啲節點剪走佢」，減低一樖決策樹嘅複雜度。研究者可以**事前剪**，即係（例如）行演算法建立決策樹之前，就講定樖樹最多可以有幾層節點，又可以指定一塊「葉」起碼要有幾多個個案；又可以**事後剪**，試吓攞走其中一條分枝，睇吓攞走咗會唔會影響分類嘅準確度，唔會嘅話就真係攞走嗰條分枝佢... 等等。

## 重要參數
喺 R 程式語言等嘅工具當中，建立決策樹可以設定以下呢啲參數：
*`maxdepth`（最大深度）：樖決策樹「最多可以有幾多層」，設定呢個數值就會限住由根節點去到最尾嘅葉節點「最長可以有幾遠」。
*`minsplit`（最小分割）：一塊「葉」最少要有幾多個個案先可以「斬出嚟」自成一塊葉，例如呢個參數設咗做 10，部電腦要做一吓切割將啲個案分做兩份嗰陣，兩邊都要最少有 10 個個案，先至可以做切割。
*`minbucket`（最細桶量）：一塊「終結葉」（佢後面冇再分支嘅葉）最少要有幾多個個案，例如呢個參數設咗做 5，部電腦做切割嗰陣會確保每一塊終結葉最少要有 5 個個案。有一種諗法認為，呢個參數數值太細容易引致過適嘅問題。
*每吓切割，個表現指標最少要改善幾多
等等。

## 睇埋
*隨機森林：一種集成學習做法，畀若干樖決策樹「齊齊做預測」——想像而家隨機抽一拃數據（個案或者變數）出嚟，用呢拃數據建立一樖決策樹，重複 N 次建立 N 咁多樖決策樹；及後對新個案做預測嗰陣，都畀呢 N 樖決策樹「投票」，即係每樖決策樹各自對新個案做預測，然後就以某啲方式結合呢啲唔同預測，再畀出嚟做結果，例如要做分類而 N = 4，呢啲決策樹當中有 3 樖都將個新個案歸類做 A 類，研究者就當個新個案係 A 類。隨機森林呢種做法被指可以提高預測嘅準確度，但係就完全只顧做預測，放棄晒詮釋能力。 
*提升決策樹：呢種做法係建立一樖決策樹先，然後再用頭嗰樖決策樹嘅殘差嚟訓練下一樖決策樹，如果有其中一拃數據係之前嗰樖決策樹零舍唔擅長預測嘅，噉呢啲數據會比較大機會成為下一樖決策樹嘅訓練用數據；同隨機森林明顯唔同嘅係，一個隨機森林入便唔同決策樹用唔同數據做訓練，而其中一樖決策樹用咩數據做訓練，係獨立於其他決策樹用咩數據嘅。
*聚類分析（等級法）
*樹狀數據
*人工智能

## 註解

## 引述
篇文用咗嘅行話或者專有名詞，英文版本如下：

篇文引用咗以下呢啲文獻同網頁：

## 外拎
* 乜嘢係決策樹？，呢篇文簡介點樣响機械學習上使用決策樹。
* SPSS 決策樹可以為你盤生意作出咩貢獻
* 用 R 程式語言嚟行決策樹學習，**Guru99**
* C4.5 演算法係乜，佢係點運作嘅？ **Towards Data Science**