Unbalanced-Classes
對於不平衡的數據集,xgboost 中 scale_pos_weight 的正確用法是什麼?
我有一個非常不平衡的數據集。我正在嘗試遵循調整建議並使用
scale_pos_weight
,但不確定我應該如何調整它。我可以看到這樣
RegLossObj.GetGradient
做:if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight
所以正樣本的梯度會更有影響力。但是,根據xgboost 論文,梯度統計總是在本地使用= 在特定樹中特定節點的實例中:
- 在節點的上下文中,評估候選分裂的損失減少
- 在葉節點的上下文中,優化賦予該節點的權重
因此,沒有辦法提前知道什麼是好的
scale_pos_weight
- 對於最終正實例和負實例之間的比率為 1:100 的節點和比率為 1:2 的節點來說,這是一個非常不同的數字。有什麼提示嗎?
通常,**
scale_pos_weight
**是負類數與正類數之比。假設數據集有 90 個負類觀察值和 10 個正類觀察值,那麼理想值
scale_pos_weight
應該是 9。請參閱文檔:http: //xgboost.readthedocs.io/en/latest/parameter.html