不均衡樣本權重的計算

2021-09-25 17:22:00 字數 2033 閱讀 5293

資料探勘中有時候會遇到不均衡樣本,一種常用的方法是通過根據樣本個數進行統計計算,或者根據業務場景人工計算權重。諸如sklearn的dt、rf等模型都設定了class_weight引數進行快速balanced;而xgb的fit中也有sampe_weight引數,只是需要手動提供每個樣本對應權重的array,這裡提供了一段簡單的計算樣本權重的**。

"""

根據labels序列進行統計,生成對應的sample權重

或者根據指定的權重字典,生成對應的sample權重

"""import numpy as np

defsample_weights_cal

(labels, flag=

0, class_weights=

none):

""" :param labels: 樣本label

:param flag: 0-返回權重字典,1-返回labels同維的權重序列

:return: 權重字典或權重序列

"""try:

labels = np.array(labels)

except typeerror:

print

("輸入格式錯誤"

)assert labels.ndim ==

1 labels_set =

set(labels)

labels_value =

list

(labels_set)

labels_count = np.array(

[(labels==l)

.sum()

for l in labels_value]

) sample_ratio = labels_count.prod(

)/labels_count

sample_ratio_std = sample_ratio / sample_ratio.

sum(

) sample_weights_dict =

ifnot class_weights:

if flag ==0:

return sample_weights_dict

else

: sample_weights_info = np.zeros(shape=labels.shape)

for i in

range

(sample_weights_info.shape[0]

):sample_weights_info[i]

= sample_weights_dict.get(labels[i]

)return sample_weights_info

else

:assert

isinstance

(class_weights,

dict

)# 必須為字典

assert flag==

1# 必須返回序列

assert labels_set ==

set(class_weights.keys())

class_weights_sum = np.array(

list

(class_weights.values())

).sum(

)print

(class_weights_sum)

for key, value in class_weights.items():

class_weights[key]

= value/class_weights_sum

sample_weights_info = np.zeros(shape=labels.shape)

for i in

range

(sample_weights_info.shape[0]

):sample_weights_info[i]

= class_weights.get(labels[i]

)return sample_weights_info

樣本不均衡

在分類中,訓練資料不均衡是指不同類別下的樣本數目相差巨大。舉兩個例子 在乙個二分類問題中,訓練集中class 1的樣本數比上class 2的樣本數的比值為60 1。使用邏輯回歸進行分類,最後結果是其忽略了class 2,將所有的訓練樣本都分類為class 1。在三分類問題中,三個類別分別為a,b,c...

樣本不均衡問題

樣本不均衡是機器學習,深度學習中常見問題。分類任務 a 95 b 5 模型將所有樣本 為a,那麼正確率可以達到95 第一種 是把多的那個組變少 降取樣 第二種 是把少的那個組變多 過取樣 最簡單的是oversampling,由於其侷限性,又有很多根據已有的資料生成新資料的方法,比如各種變體的synt...

分類問題 樣本不均衡

資料層 通過重取樣使樣本空間均衡 演算法層 重點學習正樣本來適應現存的分類器 損失敏感方法 整合資料層和演算法層的思想,假設正樣本誤分類的損失更大。boosting演算法 不斷提高樣本權重 1 對正樣本隨機過取樣,對負樣本隨機下取樣。2 按照樣本特徵和比例來過取樣正樣本或下取樣負樣本,雖然重取樣在樣...