過度擬合和修剪
使用上述演算法,我們可以訓練出可完美分類訓練範例的決策樹,前提是這些範例可分離。不過,如果資料集含有雜訊,這棵樹就會過度擬合資料,並顯示不佳的測試準確度。
下圖顯示雜訊資料集,其中特徵 x 與標籤 y 之間有線性關係。這張圖也顯示了在這個資料集上訓練的決策樹,且未使用任何類型的正規化。這個模型可正確預測所有訓練範例 (模型的預測結果與訓練範例相符)。不過,如果新資料集包含相同的線性模式和不同的雜訊例項,模型的成效就會不佳。
圖 12. 雜訊資料集。
如要限制決策樹過度擬合,請在訓練決策樹時套用下列一或兩個正規化條件:
- 設定最大深度:避免決策樹的深度超過最大深度 (例如 10)。
- 設定葉節中的範例數量下限:如果葉節中的範例數量少於特定數量,系統就不會考慮將其分割。
下圖說明每個葉節的示例數量不同所造成的影響。模型會擷取較少的噪音。
圖 13. 每個葉節點的範例數量下限不同。
您也可以在訓練後進行規則化,方法是選擇性地移除 (修剪) 特定分支,也就是將特定非葉節點轉換為葉節點。選取要移除的分支的常見解決方案是使用驗證資料集。也就是說,如果移除某個分支可改善驗證資料集的模型品質,系統就會移除該分支。
下圖說明瞭這個概念。在此,我們會測試如果將非葉節點轉換為葉節點,決策樹的驗證準確度是否會提升;也就是說,要修剪橘色節點。
圖 14. 將條件及其子項裁剪為葉節點。
下圖說明使用 20% 的資料集做為驗證資料,以便修剪決策樹的效果:
圖 15. 使用 20% 的資料集來修剪決策樹。
請注意,使用驗證資料集會減少可用於決策樹初始訓練的範例數量。
許多模型建構人員會套用多個條件。舉例來說,您可以執行下列所有操作:
- 為每個葉節套用最低範例數。
- 套用最大深度,限制決策樹的成長。
- 修剪決策樹。
- 最少的示例數量為 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」個範例和所選超參數訓練最終決策樹。
在本節中,我們討論了決策樹限制過度擬合的方式。儘管有這些方法,但欠佳擬合和過度擬合仍是決策樹的主要缺點。決策樹會導入新方法來限制過度擬合,我們稍後會介紹這項方法。
直接決策樹解讀
決策樹容易解讀。不過,即使只變更幾個例子,也可能會完全改變決策樹的結構,進而影響解讀方式。
由於決策樹的建構方式是將訓練範例劃分,因此可以使用決策樹解讀資料集本身 (而非模型)。每個葉節都代表資料集的特定角落。
model.describe()
函式查看樹狀圖。您也可以使用 model.get_tree()
存取及繪製個別樹狀圖。詳情請參閱
YDF 的模型檢查教學課程。不過,間接解釋也能提供有用的資訊。