xgboost 數據不平衡處理方式


在對不平衡數據進行訓練時,通常會考慮一下怎么處理不平衡數據能使訓練出來的結果較好。能想到的比較基礎的方法是過采樣和下采樣來緩解數據中的正負樣本比。

在用xgboost訓練二分類模型時,除了直接使用過采樣和下采樣,xgboost接口還提供一些處理不平衡數據的方法,有scale_pos_weight參數的設置,還有給樣本賦予一定的權重。接下來讓我們仔細看一下吧~

1、參數scale_pos_weight:

官方的解釋是這樣的,scale_pos_weight可以設置為數據中負樣本數量/正樣本數量

2、設置樣本的權重,在DMatrix里邊可以設置

 

 

 

關於scale_pos_weight ,在xgboost里邊的源碼是:

if (label == 1.0f) {
            w *= scale_pos_weight;
          }

  

從源代碼也可以看出,scale_pos_weight其實就是改變樣本weight,也就是和在DMatrix里邊設置每個樣本的weight是一樣的。

在DMatrix里邊設置每個樣本的weight 是 怎樣改變訓練過程的呢,其實是改變訓練的損失函數,源代碼里的代碼如下,可以看到對不同的樣本賦予不同的權重實際上是影響了該樣本在訓練過程中貢獻的損失,進而改變了一階導和二階導。

_out_gpair[_idx] = GradientPair(Loss::FirstOrderGradient(p, label) * w,
                   Loss::SecondOrderGradient(p, label) * w);

  

 

結論:

xgboost中scale_pos_weight、對樣本進行weight設置 和 簡單復制正樣本得到的結果是一樣的,本質上都是改變了訓練的損失函數。

通過自定義設置損失函數可得到驗證。實際上基本思想都是通過過采樣的方法處理不平衡數據。

 

https://blog.csdn.net/qq_32103261/article/details/106664227?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-5-106664227.nonecase&utm_term=xgboost%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%A0%B7%E6%9C%AC%E4%B8%8D%E5%B9%B3%E8%A1%A1%E9%97%AE%E9%A2%98&spm=1000.2123.3001.4430

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM