在對不平衡資料進行訓練時,通常會考慮一下怎麼處理不平衡資料能使訓練出來的結果較好。能想到的比較基礎的方法是過取樣和下取樣來緩解資料中的正負樣本比。
在用xgboost訓練二分類模型時,除了直接使用過取樣和下取樣,xgboost介面還提供一些處理不平衡資料的方法,有scale_pos_weight引數的設定,還有給樣本賦予一定的權重。接下來讓我們仔細看一下吧~
1、引數scale_pos_weight:
官方的解釋是這樣的,scale_pos_weight可以設定為資料中負樣本數量/正樣本數量
2、設定樣本的權重,在dmatrix裡邊可以設定
關於scale_pos_weight ,在xgboost裡邊的原始碼是:
if (label == 1.0f)從源**也可以看出,scale_pos_weight其實就是改變樣本weight,也就是和在dmatrix裡邊設定每個樣本的weight是一樣的。
在dmatrix裡邊設定每個樣本的weight 是 怎樣改變訓練過程的呢,其實是改變訓練的損失函式,源**裡的**如下,可以看到對不同的樣本賦予不同的權重實際上是影響了該樣本在訓練過程中貢獻的損失,進而改變了一階導和二階導。
_out_gpair[_idx] = gradientpair(loss::firstordergradient(p, label) * w,結論:xgboost中scale_pos_weight、對樣本進行weight設定 和 簡單複製正樣本得到的結果是一樣的,本質上都是改變了訓練的損失函式。loss::secondordergradient(p, label) * w);
通過自定義設定損失函式可得到驗證。實際上基本思想都是通過過取樣的方法處理不平衡資料。
不平衡資料處理
在做實驗中遇到了非平衡資料集,導致實驗結果很憂傷,資料類別不均對模型訓練有挺大影響,尤其是在類別極度不均的時候。目前還沒有很好的解決方法,還處於查詢資料,比著葫蘆找葫蘆的過程中,記錄一下,或許能有所啟發。對於不平衡資料,其實類別精度 precise 和召回率 recall 或者是準確率 accura...
如何處理不平衡資料
過取樣 過擬合 學習到小類別樣本中的雜訊 欠取樣 欠擬合 丟失大類別樣本中的重要資料 找到小類別樣本中的k個近鄰,然後在他們之間的連線上取點,作為新的樣本。缺點 容易過擬合 其與smote的不同是 smote是對每乙個minority樣本產生綜合新樣本,而borderline smote僅對靠近邊界...
類別不平衡資料處理
1 不平衡資料處理教程 1 2 3 4 2 不平衡資料分類演算法 1 over sampling 隨機過取樣 smote adasyn 臨界smote演算法 svm smote等。2 under sampling 隨機欠取樣 enn renn allknn等。3 combination smotet...