過度擬合和修剪

使用上述演算法,我們可以訓練出可完美分類訓練範例的決策樹,前提是這些範例可分離。不過,如果資料集含有雜訊,這棵樹就會過度擬合資料,並顯示不佳的測試準確度。

下圖顯示雜訊資料集,其中特徵 x 與標籤 y 之間有線性關係。這張圖也顯示了在這個資料集上訓練的決策樹,且未使用任何類型的正規化。這個模型可正確預測所有訓練範例 (模型的預測結果與訓練範例相符)。不過,如果新資料集包含相同的線性模式和不同的雜訊例項,模型的成效就會不佳。

一般斜率為 +1,但由於資料集雜訊過多,個別資料點有時會遠離最佳擬合線。

圖 12. 雜訊資料集。

 

如要限制決策樹過度擬合,請在訓練決策樹時套用下列一或兩個正規化條件:

  • 設定最大深度:避免決策樹的深度超過最大深度 (例如 10)。
  • 設定葉節中的範例數量下限:如果葉節中的範例數量少於特定數量,系統就不會考慮將其分割。

下圖說明每個葉節的示例數量不同所造成的影響。模型會擷取較少的噪音。

三個圖表,每個圖表都顯示每個葉節的最小示例數量不同值的效果。不同的值為 2、5 和 10。

圖 13. 每個葉節點的範例數量下限不同。

您也可以在訓練後進行規則化,方法是選擇性地移除 (修剪) 特定分支,也就是將特定非葉節點轉換為葉節點。選取要移除的分支的常見解決方案是使用驗證資料集。也就是說,如果移除某個分支可改善驗證資料集的模型品質,系統就會移除該分支。

下圖說明瞭這個概念。在此,我們會測試如果將非葉節點轉換為葉節點,決策樹的驗證準確度是否會提升;也就是說,要修剪橘色節點。

兩個決策樹。一個決策樹包含 9 個節點,另一個決策樹則將其中一個條件轉換為葉節點,因此只剩下 6 個節點。

圖 14. 將條件及其子項裁剪為葉節點。

 

下圖說明使用 20% 的資料集做為驗證資料,以便修剪決策樹的效果:

這張圖表顯示鋸齒狀的過度擬合模型與理想的直線模型

圖 15. 使用 20% 的資料集來修剪決策樹。

 

請注意,使用驗證資料集會減少可用於決策樹初始訓練的範例數量。

許多模型建構人員會套用多個條件。舉例來說,您可以執行下列所有操作:

  • 為每個葉節套用最低範例數。
  • 套用最大深度,限制決策樹的成長。
  • 修剪決策樹。
YDF 代碼
在 YDF 中,學習演算法會預先設定所有修剪超參數的預設值。舉例來說,以下是兩個修剪超參數的預設值:
  • 最少的示例數量為 5 (min_examples = 5)
  • 系統會保留 10% 的訓練資料集進行驗證 (validation_ratio = 0.1)。
您可以設定 validation_ratio=0.0,停用驗證資料集的修剪功能。

這些條件會引入需要調整的新超參數 (例如樹狀圖的最大深度),通常會搭配自動超參數調整功能。決策樹的訓練速度通常相當快,因此可以使用超參數調整功能搭配交叉驗證。例如,在包含「n」個示例的資料集上:

  • 將訓練樣本分成 p 個不重疊的群組。例如 p=10
  • 所有可能的超參數值,例如最大深度為 {3,5,6,7,8,9},最少樣本為 {5,8,10,20}。
    • 針對每個群組,評估在其他 p-1 群組上訓練的決策樹品質。
    • 對各群組的評估結果求平均值。
  • 選取平均評估值最佳的超參數值。
  • 使用所有「n」個範例和所選超參數訓練最終決策樹。

在本節中,我們討論了決策樹限制過度擬合的方式。儘管有這些方法,但欠佳擬合和過度擬合仍是決策樹的主要缺點。決策樹會導入新方法來限制過度擬合,我們稍後會介紹這項方法。

直接決策樹解讀

決策樹容易解讀。不過,即使只變更幾個例子,也可能會完全改變決策樹的結構,進而影響解讀方式。

由於決策樹的建構方式是將訓練範例劃分,因此可以使用決策樹解讀資料集本身 (而非模型)。每個葉節都代表資料集的特定角落。

YDF 代碼
在 YDF 中,您可以使用 model.describe() 函式查看樹狀圖。您也可以使用 model.get_tree() 存取及繪製個別樹狀圖。詳情請參閱 YDF 的模型檢查教學課程

不過,間接解釋也能提供有用的資訊。