與隨機森林不同,梯度提升樹可能過度擬合。因此,針對神經網路,您可以使用驗證資料集套用正則化和提早停止。
舉例來說,下圖顯示訓練 GBT 模型時,訓練和驗證集的損失和準確度曲線。請注意曲線的差異程度,這表示過度擬合程度高。
圖 29. 損失率與決策樹數量。
圖 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 / 例項)。
缺點
- 決策樹必須依序訓練,這可能會大幅減緩訓練速度。不過,訓練速度變慢的情況會因決策樹變小而稍微緩解。
- 與隨機樹系一樣,梯度提升樹無法學習及重複使用內部表示法。每個決策樹 (以及每個決策樹的每個分支) 都必須重新學習資料集模式。在某些資料集 (尤其是包含非結構化資料 (例如圖片、文字) 的資料集) 中,這會導致梯度提升樹的結果比其他方法更差。