2016-12-05 1813 views
1

我有一個20000個訓練樣例的數據集,我想在其中進行二元分類。 問題是數據集嚴重不平衡,只有大約1000人處於積極的階層。我正在嘗試使用xgboost(在R中)來做我的預測。Xgboost處理不平衡的分類數據

我已經嘗試過採樣和欠採樣,不管我做什麼,不知何故,預測總是導致在分類中作爲大多數類的一切。

我嘗試閱讀本文,瞭解如何在xgboost中調整參數。 https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

但它只提到哪些參數有助於不平衡的數據集,但沒有提及如何調整它們。

如果有人對調整xgboost的學習參數以處理不平衡數據集以及如何爲這些情況生成驗證集有任何建議,我將不勝感激。

+0

這可能會有幫助http://stats.stackexchange.com/questions/171043/how-to-tune-hyperparameters-of-xgboost-trees – gfgm

回答

0

對神經網絡有用的技術是在觀測中引入一些噪聲。 在R中有'抖動'功能來做到這一點。 對於您的1000個罕見情況,僅對其功能應用少量抖動,以便爲您提供另外1000個個案。 再次運行您的代碼並查看預測是否正在吸取任何積極的類。 您可以嘗試更多附加案例和/或改變抖動量。 HTH,cousin_pete

0

XGBoost文檔中,scale_pos_weight參數是一個處理不平衡類。參見,文檔here

scale_pos_weight,[默認= 1]控制的正平衡, 負權重,用於不平衡的類是有用的。一個典型的價值 考慮:SUM(陰性病例)/總和(陽性)查看參數 調整更多的討論。還看到希格斯Kaggle競爭演示了 例子:R,PY1,PY2,PY3

0

嘗試是這樣的R中

bstSparse <- xgboost(data =xgbTrain , max_depth = 4, eta = 0.2, nthread = 2, nrounds = 200 , 
       eval_metric = "auc" , scale_pos_weight = 48, colsample_bytree = 0.7, 
       gamma = 2.5, 
       eval_metric = "logloss", 
       objective = "binary:logistic") 

哪裏scale_pos_weight是不平衡的。我的基線發病率約4%。使用超參數優化。可以試穿scale_pos_weight太