Unbalanced-Classes

對於不平衡的數據集,xgboost 中 scale_pos_weight 的正確用法是什麼?

  • October 30, 2016

我有一個非常不平衡的數據集。我正在嘗試遵循調整建議並使用scale_pos_weight,但不確定我應該如何調整它。

我可以看到這樣RegLossObj.GetGradient做:

if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight

所以正樣本的梯度會更有影響力。但是,根據xgboost 論文,梯度統計總是在本地使用= 在特定樹中特定節點的實例中:

  1. 在節點的上下文中,評估候選分裂的損失減少
  2. 在葉節點的上下文中,優化賦予該節點的權重

因此,沒有辦法提前知道什麼是好的scale_pos_weight- 對於最終正實例和負實例之間的比率為 1:100 的節點和比率為 1:2 的節點來說,這是一個非常不同的數字。

有什麼提示嗎?

通常,**scale_pos_weight**是負類數與正類數之比。

假設數據集有 90 個負類觀察值和 10 個正類觀察值,那麼理想值scale_pos_weight應該是 9。

請參閱文檔:http: //xgboost.readthedocs.io/en/latest/parameter.html

引用自:https://stats.stackexchange.com/questions/243207

comments powered by Disqus