記 XGBoost 的一個坑

正文

XGBoost 是陳天奇(怪)領銜開發的一套 Gradient Boost 演算法實現,比如我會用到它做 LambdaMART 的實驗。如果要給它一個評價,那應該是:好用、耐操。

不過,也有甜蜜的煩惱。XGBoost 在每輪迭代後,能夠貼心地給出模型在數據集上的指標。比如我會關心 NDCG 指標。然而,這裡列印出來的指標,會比事後用標準演算法計算出來的值要高不少。

最後,經檢查(這裡包含了血與淚),是 XGBoost 對 idealDCG 為 0 時的默認處理方式與標準演算法不同導致的。標準演算法,當 idealDCG 為 0 時,當前 NDCG 給 0;而 XGBoost 給 1,於是 XGBoost 計算出的最終 NDCG 要比標準演算法計算得到的大不少。這件事情在 XGBoost 的文檔里沒有說明,所以稱其為一個坑。

解決方法也很簡單,在傳參的時候,修改一下即可。

# beforeeval_metric: ndcg@10# aftereval_metric: ndcg@10-

沒錯,只需要加一個減號就行了……

鏈接

  • XGBoost:dmlc/xgboost

  • 陳天奇怪:Sina Visitor System

  • LambdaMART:LambdaMART 不太簡短之介紹

推薦閱讀:

數據分析及機器學習環境配置(docker極簡入門指南)
國慶回家,我在手機上訓練XGBoost模型
LightGBM 中文文檔發布,持續 Update 中,歡迎各位大佬前來裝逼 | ApacheCN
《XGBoost: A Scalable Tree Boosting System》
如何在Python上安裝xgboost?

TAG:xgboost | 搜索引擎 |