過度配適、正規化和提早中止

與隨機森林不同,梯度提升樹可能過度擬合。因此,針對神經網路,您可以使用驗證資料集套用正則化和提早停止。

舉例來說,下圖顯示訓練 GBT 模型時,訓練和驗證集的損失和準確度曲線。請注意曲線的差異程度,這表示過度擬合程度高。

訓練損失和驗證損失與決策樹數量的圖表。隨著決策樹數量增加,訓練損失會逐漸減少。不過,驗證損失只會在約 40 個決策樹之前下降。使用超過 40 個決策樹時,驗證損失實際上會增加。使用 400 個決策樹時,訓練損失和驗證損失之間的差距非常大。

圖 29. 損失率與決策樹數量。

 

訓練準確度和驗證準確度與決策樹數量的圖表。隨著決策樹數量增加,訓練準確度也會逐漸提升,在 400 個決策樹時達到近 1.0 的最高值。驗證準確度會在 40 個決策樹時提高至約 0.86,然後在 400 個決策樹時逐漸降至約 0.83。

圖 30. 準確率與決策樹數量。

 

梯度提升樹的常見正則化參數包括:

  • 樹狀結構的深度上限。
  • 收縮率。
  • 每個節點測試的屬性比率。
  • 損失的 L1 和 L2 係數。

請注意,決策樹的深度通常比隨機森林模型淺得多。根據預設,TF-DF 中的梯度提升樹會成長至深度 6。由於樹狀結構較淺,每個葉節點的示例數量下限幾乎沒有影響,因此通常不會進行調整。

當訓練範例數量不多時,就需要驗證資料集。因此,通常會在交叉驗證迴圈中訓練梯度提升樹,或是在已知模型不會過度擬合時停用提早停止機制。

使用範例

在上一章中,我們針對小型資料集訓練隨機森林。在這個範例中,我們會直接將隨機樹模型替換為梯度提升樹模型:

model = tfdf.keras.GradientBoostedTreesModel()

# Part of the training dataset will be used as validation (and removed
# from training).
model.fit(tf_train_dataset)

# The user provides the validation dataset.
model.fit(tf_train_dataset, validation_data=tf_valid_dataset)

# Disable early stopping and the validation dataset. All the examples are
# used for training.
model.fit(
   tf_train_dataset,
   validation_ratio=0.0,
   early_stopping="NONE")
# Note: When "validation_ratio=0", early stopping is automatically disabled,
# so early_stopping="NONE" is redundant here.

使用方式和限制

梯度提升樹有幾項優缺點。

優點

  • 與決策樹一樣,這些樹狀結構本支援數值和分類特徵,通常不需要特徵預先處理。
  • 梯度提升樹的預設超參數通常可帶來出色的結果。不過,調整這些超參數可大幅改善模型。
  • 梯度提升樹模型通常很小 (節點數和記憶體),且執行速度快 (通常只需一或幾個 µs / 例項)。

缺點

  • 決策樹必須依序訓練,這可能會大幅減緩訓練速度。不過,訓練速度變慢的情況會因決策樹變小而稍微緩解。
  • 與隨機樹系一樣,梯度提升樹無法學習及重複使用內部表示法。每個決策樹 (以及每個決策樹的每個分支) 都必須重新學習資料集模式。在某些資料集 (尤其是包含非結構化資料 (例如圖片、文字) 的資料集) 中,這會導致梯度提升樹的結果比其他方法更差。