---
# System prepended metadata

title: 決策樹（Decision Tree）
tags: [機器學習]

---

## 介紹決策樹（Decision Tree）
決策樹的核心概念源自於人類決策過程的模擬，它透過一系列的條件判斷，將複雜的問題逐步拆解，最終得出結論，這種結構類似於樹狀圖，從根節點開始，根據特徵條件分支延伸，直到葉節點給出最終的預測結果。無論是用於分類任務，例如判斷一封電子郵件是否為垃圾郵件，還是回歸任務，例如預測房價，決策樹都能提供清晰的邏輯路徑，讓使用者不僅能獲得結果，還能理解背後的決策過程。

![image](https://hackmd.io/_uploads/SkyBbej2kl.png)

## Decision Tree Classifier 運作原理
### Pure split vs. impure split
Pure split 是指一個節點在被特徵切分後，產生的每個子節點內部只包含單一類別的資料，舉例來說，假設有一組用來預測是否喜歡貓的資料，若依據「是否對動物有過敏史」這個特徵進行劃分，可能結果如下：

* 有過敏史 → 100% 樣本標記為「不喜歡貓」
* 無過敏史 → 100% 樣本標記為「喜歡貓」

這就是一個典型的 Pure split，每個分支都對應到唯一的類別，決策過程非常明確，這種情況下，節點的熵值（Entropy）或 Gini impurity 為 0，表示完全純淨，模型不需要再往下切分。

相對地，impure split 則表示劃分後的子節點中仍混有多種類別的資料，以相同例子來看，若我們依據「年齡是否大於 30 歲」來切分，可能結果如下：
* 年齡 ≤ 30 → 70% 喜歡貓，30% 不喜歡貓
* 年齡 > 30 → 40% 喜歡貓，60% 不喜歡貓

這種分裂產生的子節點中仍包含不止一種類別，因此被視為不純的，此時節點的熵值（Entropy）或 Gini impurity 會大於 0，演算法可能會嘗試進一步切分這些節點，尋找更具區別性的特徵。

### Purity 由 Entropy 以及 Gini impurity 來表示
* 熵值（Entropy）來自資訊理論，用來衡量資訊的不確定性。當一個節點中的類別非常混亂時（即每個類別的機率都接近），熵會很高；相反，當所有樣本都屬於同一類別時，熵會為 0。
* Gini Impurity 是另一種衡量節點混亂程度的指標，常用於 CART 演算法，它評估從該節點中隨機挑選兩個樣本時，它們屬於不同類別的機率。
![image](https://hackmd.io/_uploads/HyiyOgjhke.png)

公式如下圖所示
![image](https://hackmd.io/_uploads/B1dvrxonJl.png =100%x)

### 特徵（切分條件）如何挑選呢？Information Gain
Information Gain（資訊增益）用來衡量某個特徵對分類結果的影響力，當我們建立決策樹時，演算法會計算每個可用特徵的資訊增益，然後選擇資訊增益最高的特徵作為分裂依據。

Information Gain 在特徵選擇過程中的主要步驟如下：
step1. 計算資料集的總熵（Entropy）
step2. 針對每個可用特徵，計算該特徵分裂後的加權熵
step3. 計算該特徵的資訊增益
step4. 選擇資訊增益最高的特徵作為分裂點
![image](https://hackmd.io/_uploads/rJBzjxs21e.png)

## Decision Tree Regressor 運作原理
在 Decision Tree Classifier（分類決策樹） 中，我們通常使用 Entropy（熵） 或 Gini Impurity 作為純度衡量指標，並透過資訊增益（Information Gain）來選擇最佳的特徵進行分裂。然而，在 Decision Tree Regressor（回歸決策樹）中，目標是預測連續數值，因此我們不能再使用熵或 Gini Impurity，取而代之的是使用均方誤差（Mean Squared Error, MSE）或平均絕對誤差（Mean Absolute Error, MAE）或變異數（Variance）來衡量節點的不純度。

因此，與分類決策樹相比，回歸決策樹的資訊增益不再關注類別純度，而是關心數值變異的減少程度。其關鍵目標是使子節點內的數值變化範圍縮小，使預測結果更加準確。因此，回歸決策樹適用於房價預測、股票價格預測、材料特性建模等場景，尤其在數據具有明顯區間性質時，表現尤為出色。

:::info
Decision Tree Claasifier 與 Decision Tree Regressor 的比較
![image](https://hackmd.io/_uploads/B1nMeZi3yl.png)
:::

## 決策樹的優缺點
![image](https://hackmd.io/_uploads/S1wQGZonyg.png)


:::info
避免決策樹 Overfitting
1. 剪枝（Pruning）
    a. 預剪枝（Pre-pruning）：在樹生長的過程中，透過設置最大深度（Max-depth）、最大葉節點（Max-leaf）等條件來限制樹的擴展。
    b. 後剪枝（Post-pruning）：在生成完整的決策樹後，然後移除對整體準確度影響不大的節點。
2. 使用集成學習（Ensemble Learning）
決策樹容易過擬合，但集成學習技術能夠透過多棵決策樹的組合來降低這個風險，有關於此項可參見此文章[集成學習(Ensemble learning): Bagging, Boosting and Stacking](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/Hk9y60v0C)。
:::