天天看點

決策樹如何防止過拟合

決策樹在長成的過程中極易容易出現過拟合的情況,導緻泛化能力低。主要有兩種手段可以用于防止過拟合。

提前停止

Early Stopping,在完全長成以前停止,以防止過拟合。主要有以下3種方式:

  1. 限制樹的高度,可以利用交叉驗證選擇
  2. 利用分類名額,如果下一次切分沒有降低誤差,則停止切分
  3. 限制樹的節點個數,比如某個節點小于100個樣本,停止對該節點切分

後剪枝

提前停止的不足

“提前停止”是一個不錯的政策,但是在實際的執行中會越到一些麻煩。比如「其中的第2點,如果下一次切分沒有降低誤差,則停止切分。」一看貌似很有道理,但是很容易舉出反例:

對一個XOR的資料集生成決策樹:

決策樹如何防止過拟合

下面如果使用x[1]切分:

決策樹如何防止過拟合

又或者用x[2]切分:

決策樹如何防止過拟合

發現,無論選擇哪一個次元進行切分都不會使得訓練誤差降低了。是以根據Early Stopping,僅僅長成隻有一個節點的stump。但是實際上:

決策樹如何防止過拟合

繼續切下去,能學成一顆具有良好區分度的決策樹。是以「提前停止」的第2種情況既有利也有弊:

決策樹如何防止過拟合

剪枝

我們通過一顆決策樹的葉子結點個數來定義這棵樹有多複雜。

決策樹如何防止過拟合

但是樹太簡單也不好,訓練誤差太大,欠拟合。是以,訓練出一顆好的決策樹就是在樹的訓練誤差與複雜程度之間做權衡。

決策樹如何防止過拟合

寫成數學公式,可以表示為:

決策樹如何防止過拟合

決策樹如何防止過拟合

剪枝算法

舉例說明

有一顆已經長成的樹:

決策樹如何防止過拟合

從底部開始考慮,第一個要檢查的切分點是Term:

決策樹如何防止過拟合

假設懲罰性lambda是0.3:

  • 對于未剪枝的T,計算它的訓練誤差為0.25,葉子結點總數為6.是以總的cost為0.43
  • 對于剪去Term的Tsamller,計算它的訓練誤差為0.26,葉子結點總數為5.是以總的cost為0.41
  • 因為剪去後的樹的損失更小。是以決定剪枝。
  • 接着對于所有的切分節點做上述相同的動作。

算法

決策樹如何防止過拟合