梯度提升決策樹狀圖

漸層和增強功能就像是封裝和增強功能,又稱為其他機器學習演算法。不過請注意,漸層增強涉及兩種模型:

  • 為「弱」的機器學習模型,這類決策通常是決策樹。
  • 一個「強烈」的機器學習模型,由多個弱模型組成。

梯度提升時,在每個步驟中,都會訓練新的弱模型來預測目前強大的模型 (稱為「虛擬回應」)。我們稍後會詳細說明「錯誤」。目前,假設「錯誤」是預測值和迴歸標籤之間的差異。接著,系統會將弱模型 (也就是「錯誤」) 新增至強大的模型,並加上負號,以減少強勢模型的錯誤。

漸層增強效果是疊代式。每次疊代作業都會叫用下列公式:

\[ F_{i+1} = F_i - f_i \]

其中:

  • $F_i$ 是步驟 $i$ 的強大模型。
  • $f_i$ 是步驟 $i$ 的弱模型。

系統會重複此作業,直到符合停止條件,例如疊代次數達到上限,或 (強) 模型開始運作,讓系統是在個別驗證資料集上測量而超載。

讓我們以簡單的迴歸資料集說明漸層的增強程度,其中:

  • 目標是預測 $x$ 的 $y$。
  • 強模型已初始化為零常數:$F_0(x) = 0$。
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

讓我們在以下資料集套用這個程式碼:

一個特徵 x 及其標籤 y 的真值圖表。劇情是一連串微弱的正弦波。

圖 25. 具有單一數值特徵的合成迴歸資料集。

 

梯度提升演算法首次疊代後,有以下三個圖表:

3 格圖。第一個圖表顯示了有效模型的預測結果,也就是斜坡 0 和 y 截距 0 的直線。第二張圖顯示了強力模型 (也就是一系列正弦波) 的錯誤。第三張圖顯示微弱模型的預測資料,也就是一組方波。

圖 26. 首次疊代後建立三個圖表。

 

請留意圖 26 中的圖:

  • 第一個圖表顯示了強大模型的預測結果,一律為 0。
  • 第二張圖顯示錯誤,也就是我們弱點模型的標籤。
  • 第三張圖顯示弱的模型。

第一個微弱的模型正在學習標籤的概略表示法,且主要位於特徵空間的左側 (變化版本變化最大的部分,因此為常數錯誤的模型最多錯誤)。

以下是演算法的另一個疊代圖:

3 格圖。第一個圖表顯示了強大模型的預測結果,也就是上圖中弱模型預測的反面。第二張圖顯示了強力模型的錯誤,也就是一組雜弦波。第三張圖顯示弱模型的預測結果,也就是兩個方波。

圖 27. 第二次疊代後,會有三個圖示。

 

請留意圖 27 中的圖:

  • 強大的模型現在包含先前疊代的低模型預測。
  • 強勢模型的新錯誤稍微小一點。
  • 目前弱點模型的預測內容現在著重於功能空間的右側。

演算法會進行 8 次疊代:

劇情顯示強勢模型會逐漸接近真值,而弱模型的預測逐漸變弱。

圖 28. 第三個疊代和第十次疊代後三個區塊。

 

請注意,在圖 28 中,強勢模型的預測結果開始會像資料集圖

這些插圖說明瞭使用決策樹作為弱學生的漸層增強演算法。這種組合稱為「梯度提升 (決策) 樹狀結構」

前述的圖表為梯度提升的基本原理。但這個範例缺少下列兩個實際作業:

  • 縮小
  • 使用 Newton's 方法的一個步驟,將葉子值最佳化

收縮

在微弱模型 $f_i$ 中,將小值 $\nu$ (例如 $\nu = 0.1$) 乘以相加模型 $F_i$。這個小值稱為 縮減。換句話說,不要使用下列公式每次疊代:

\[ F_{i+1} = F_i - f_i \]

每項疊代作業都會使用以下公式:

\[ F_{i+1} = F_i - \nu f_i \]

梯度提升中的縮減與類神經網路的學習率相當。縮減功能可控制強大模型的學習速度,進而限制過度超載。這表示將更接近 0.0 的縮減值減少到超過 1.0 的收縮值。

在上方的程式碼中,實作的縮減方式如下:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions