1. 程式人生 > 實用技巧 >xgboost 資料不平衡處理方式

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