監督學習:決策樹的智慧——資訊增益與吉尼不純度

監督學習:決策樹的智慧——資訊增益與吉尼不純度

決策樹是如何決定每一次的「分叉」?本篇延續分類大師班的結構,透過經典的鳶尾花資料集,深入解析決策樹的核心分裂指標:資訊增益(Information Gain)與吉尼不純度(Gini Impurity)。


Day 02 中,我們學習了分類模型的評估指標(Accuracy, Precision, Recall...)。今天,我們將焦點放在一個非常直觀且強大的分類器——決策樹 (Decision Tree),並深入探討它是如何透過「指標」來決定每一次的分裂。


一、 資料集來源:Iris Dataset (鳶尾花資料集)

  • 資料來源:UCI Machine Learning Repository / Scikit-Learn 內建資料集。
  • 備註:這是機器學習當中最經典的分類資料集之一,用於透過花萼與花瓣的尺寸來預測鳶尾花的種類。

資料集特色與欄位介紹:

這是一個 多元分類問題 (Multiclass Classification)(共有 3 個類別)。

  • Target (目標 y):鳶尾花種類 (0=Setosa, 1=Versicolor, 2=Virginica)。
  • 特徵 (Features):共 4 個數值特徵:
    1. Sepal length (花萼長度)
    2. Sepal width (花萼寬度)
    3. Petal length (花瓣長度)
    4. Petal width (花瓣寬度)

二、 模型評估:決策樹實測結果

我們使用 Scikit-Learn 的 DecisionTreeClassifier 進行訓練,並設定最大深度為 3。以下是測試集(共 30 個樣本)的實測結果:

關鍵指標對比:

指標定義實戰數據說明
Accuracy (準確率)猜對的總數 / 樣本總數100% (30/30):在這次的測試集上,模型達成了完美的預測!
Precision (精確率)預測為該類中,實際為該類的比例100%:預測完全精準。
Recall (召回率)實際為該類中,被預測出來的比例100%:沒有漏掉任何一個樣本。
F1-ScorePrecision 與 Recall 的調和平均100%:完美的平衡。

(註:100% 的準確率部分原因是因為 Iris 資料集較小且特徵明顯,實戰中需注意過擬合風險。)


三、 視覺化解析:這棵樹是怎麼長出來的?

我們將模型訓練的決策樹視覺化,並輸出如下圖片

決策樹視覺化

圖片結果與規則說明:

從圖片中(或文字規則),我們可以看到決策樹是如何利用特徵進行切分的:

  1. 根節點 (最頂端):首先使用 petal length (cm) <= 2.45 進行切分。
    • 結果:如果滿足(True),直接判定為 Setosa (class 0)。這一步非常完美,因為 Setosa 的花瓣長度明顯短於其他兩類。
  2. 第二層 (右側分枝):對於花瓣長度 > 2.45 的樣本,繼續用 petal length (cm) <= 4.75 來切分。
    • 如果是:再用 petal width (cm) <= 1.65 切分,小於等於的為 Versicolor (class 1),大於的為 Virginica (class 2)
    • 如果否:代表花瓣很長(> 4.75),這時再用 petal width (cm) <= 1.75 切分,分出 class 1 和 class 2。

這就是決策樹的魅力:高度的可解釋性。我們能清清楚楚地看到它是依據什麼規則做出判斷的。

那問題來了:模型是怎麼知道要用 petal length <= 2.45 來切第一刀,而不是其他特徵?


四、 指標的博弈:資訊增益 vs. 吉尼不純度

決策樹在決定「怎麼切分」時,會評估切分後的「純度」提升。這裡有兩個最主要的評估指標:

1. 資訊增益 (Information Gain)

  • 核心概念:基於 熵 (Entropy)。熵代表系統的混亂程度。
  • 計算方式資訊增益 = 分裂前的熵 - 分裂後的熵(加權平均)
  • 特點:資訊增益 越大,代表這次分裂帶來的「純度提升」越高。ID3 和 C4.5 演算法主要使用此指標。

2. 吉尼不純度 (Gini Impurity)

  • 核心概念:衡量從資料集中隨機抽取兩個樣本,其類別不一致的機率。
  • 計算方式1pi21 - \sum p_i^2
  • 特點:吉尼不純度 越低,代表節點越「純」。它是 CART 演算法(Scikit-Learn 預設)的核心指標。

3. 解答:實際數字算給你看,為什麼是 petal length <= 2.45

我們來算算看這棵樹第一刀的「吉尼不純度下降幅度」。在我們的訓練集中共有 120 筆資料(三種花各有大約 40 筆)作為根節點:

  • 分裂前的吉尼不純度: 三種花比例約各佔 1/31/3Gini(前)=1[(13)2+(13)2+(13)2]0.667\text{Gini(前)} = 1 - \left[\left(\frac{1}{3}\right)^2 + \left(\frac{1}{3}\right)^2 + \left(\frac{1}{3}\right)^2\right] \approx 0.667

【方案 A】演算法選中的神仙一刀:petal length <= 2.45

  • 左子節點 (True):被分到這裡的 40 筆資料,全部都是 SetosaGini(左)=1[(4040)2]=0\text{Gini(左)} = 1 - \left[\left(\frac{40}{40}\right)^2\right] = 0 (純度 100%!)
  • 右子節點 (False):剩下的 80 筆資料(約 40 筆 Versicolor, 40 筆 Virginica)。 Gini(右)=1[(4080)2+(4080)2]=1[0.25+0.25]=0.50\text{Gini(右)} = 1 - \left[\left(\frac{40}{80}\right)^2 + \left(\frac{40}{80}\right)^2\right] = 1 - [0.25 + 0.25] = 0.50
  • 分裂後的加權吉尼不純度Gini(方案A)=(40120×0)+(80120×0.50)0.333\text{Gini(方案A)} = \left(\frac{40}{120} \times 0\right) + \left(\frac{80}{120} \times 0.50\right) \approx 0.333
  • 純度提升幅度 = 0.6670.333=0.3340.667 - 0.333 = \mathbf{0.334}

【方案 B】假設隨便選一個特徵:sepal width <= 3.0

  • 如果用這刀切,左節點和右節點都還是混雜著大量不同種類的花。
  • 分裂後算出來的加權 Gini(方案B)\text{Gini(方案B)} 可能依然高達 0.600.60
  • 純度提升幅度 = 0.6670.60=0.0670.667 - 0.60 = \mathbf{0.067}

結論: 方案 A 帶來了高達 0.334 的不純度下降(純度大提升),遠勝過方案 B 的 0.067。演算法沒有魔法,它只是在背後把所有特徵的每一種可能切法都套用上面的公式算一遍,然後挑出「下降幅度最大」的那個條件!


五、 兩大分裂指標的深入對比

這兩個指標都能幫決策樹找到好的分裂點,但它們有什麼差別呢?

特性資訊增益 (Information Gain)吉尼不純度 (Gini Impurity)
計算複雜度較高(涉及 log2\log_2 運算)較低(僅涉及平方運算)
對極端情況較敏感較不敏感
應用演算法ID3, C4.5CART
實戰表現兩者在 98% 的情況下結果相似。吉尼不純度計算較快,通常作為首選。

六、 行動建議

  1. 優先使用預設的 Gini:除非有特殊需求,否則 Gini 的計算速度優勢更適合大數據集。
  2. 注意過擬合:決策樹非常容易「記住」訓練資料。實戰中一定要限制 max_depth 或設定 min_samples_split
  3. 結合隨機森林:如果單棵樹的泛化能力不夠,可以透過 Ensemble(整合學習)如 Random Forest 或 XGBoost 來提升穩定度。