機器學習中參數調整是門藝術,模型的最佳參數可能取決於許多場景,所以很難為此做一個全麵的指導。本文嘗試為xgboost中的參數調整提供一些說明。
了解偏差-方差權衡(Bias-Variance Tradeoff)
在機器學習或統計課程中,偏差方差權衡可能是最重要的概念之一。當我們允許模型變得更加複雜(例如,更大的深度)時,模型具有更好的適應訓練數據的能力,從而使模型偏差較小。然而,這種複雜的模型需要更多的數據來做訓練。
xgboost中的大多數參數是關於偏差方差權衡的。最好的模型應該在模型的複雜性及模型的預測能力上做細致的權衡(注:模型的複雜度越高,對訓練數據的擬合能力就越強,其泛化或者預測能力可能就越差)。
[xgboost參數文檔]介紹了每個參數對模型造成的影響,可以幫助您在複雜的模型和簡單的模型之間自由調整。
控製過擬合
當您觀察到較高的訓練準確率,但測試精度較低時,很可能遇到了過擬合問題。
通常可以通過兩種方式來控製xgboost中的過擬合
- 第一種方式是直接控製模型的複雜性
- 這包括
max_depth
,min_child_weight
和gamma
- 這包括
- 第二種方法是增加隨機性,使訓練對噪聲更加魯棒
- 這包括
subsample
,colsample_bytree
- 你還可以減少步驟
eta
,但是當你這樣做時,需要記住增加num_round
。
- 這包括
處理不平衡數據集
對於常見情況,例如廣告點擊日誌,數據集非常不平衡。這會影響xgboost模式的訓練,有兩種方法可以改進。
- 如果你隻關心您的預測的排名順序(AUC)
- 通過
scale_pos_weight
平衡正負權重 - 使用
AUC
進行評估
- 通過
- 如果你關心預測正確的概率
- 在這種情況下,您無法重新平衡數據集
- 在這種情況下,將參數
max_delta_step
設置為有限數量(例如1)將有助於收斂
英文版:http://xgboost.readthedocs.io/en/latest/how_to/param_tuning.html