樣本不平衡的處理方式

2021-10-09 20:58:20 字數 3179 閱讀 1649

來自:宋天龍《python資料分析與資料化運營》,以下內容比較簡陋,方便日後翻閱。

樣本不平衡怎麼辦?

1.過取樣、欠取樣

2.調節樣本的權重

3.組合或整合的方法

1.匯入資料

import pandas as pd

from imblearn.over_sampling import smote # 過抽樣處理庫smote

from imblearn.under_sampling import randomundersampler # 欠抽樣處理庫randomundersampler

from sklearn.svm import svc # svm中的分類演算法svc

# 匯入資料檔案

df = pd.read_table(

'data2.txt'

, sep=

' ',

names=

['col1'

,'col2'

,'col3'

,'col4'

,'col5'

,'label'])

# 讀取資料檔案

x, y = df.iloc[:,

:-1]

,df.iloc[:,

-1]# 切片,得到輸入x,標籤y

groupby_data_orgianl = df.groupby(

'label'

).count(

)# 對label做分類彙總

print

(groupby_data_orgianl)

# 列印輸出原始資料集樣本分類分布

2.過取樣

# 使用smote方法進行過抽樣處理

model_smote = smote(

)# 建立smote模型物件

x_smote_resampled, y_smote_resampled = model_smote.fit_sample(x, y)

# 輸入資料並作過抽樣處理

x_smote_resampled = pd.dataframe(x_smote_resampled,

columns=

['col1'

,'col2'

,'col3'

,'col4'

,'col5'])

# 將資料轉換為資料框並命名列名

y_smote_resampled = pd.dataframe(y_smote_resampled, columns=

['label'])

# 將資料轉換為資料框並命名列名

smote_resampled = pd.concat(

[x_smote_resampled, y_smote_resampled]

, axis=1)

# 按列合併資料框

groupby_data_smote = smote_resampled.groupby(

'label'

).count(

)# 對label做分類彙總

print

(groupby_data_smote)

# 列印輸出經過smote處理後的資料集樣本分類分布

3.欠取樣

# 使用randomundersampler方法進行欠抽樣處理

model_randomundersampler = randomundersampler(

)# 建立randomundersampler模型物件

x_randomundersampler_resampled, y_randomundersampler_resampled = model_randomundersampler.fit_sample(

x,y)

# 輸入資料並作欠抽樣處理

x_randomundersampler_resampled = pd.dataframe(x_randomundersampler_resampled,

columns=

['col1'

,'col2'

,'col3'

,'col4'

,'col5'])

# 將資料轉換為資料框並命名列名

y_randomundersampler_resampled = pd.dataframe(y_randomundersampler_resampled,

columns=

['label'])

# 將資料轉換為資料框並命名列名

randomundersampler_resampled = pd.concat(

[x_randomundersampler_resampled, y_randomundersampler_resampled]

, axis=1)

# 按列合併資料框

groupby_data_randomundersampler = randomundersampler_resampled.groupby(

'label'

).count(

)# 對label做分類彙總

print

(groupby_data_randomundersampler)

# 列印輸出經過randomundersampler處理後的資料集樣本分類分布

4.使用可以自動調節樣本權重的模型

# 使用svm的權重調節處理不均衡樣本

model_svm = svc(class_weight=

'balanced'

,gamma=

'scale'

)# 建立svc模型物件並指定類別權重

model_svm.fit(x, y)

# 輸入x和y並訓練模型

樣本不平衡的處理方法

樣本不平衡其實的主要思想就是過取樣和欠取樣,但是由於在複製少量標籤的樣本或者篩選大量標籤的樣本方法不同衍生出了不同的處理手段 1.隨機過取樣 複製標籤少的樣本使得好壞比滿足建模需要 2.隨機欠取樣 抽取標籤多的樣本使得好壞比滿足建模需要 會丟失樣本資訊 3.easyensemble 標籤多的樣本進行...

樣本不平衡問題

樣本不平衡是指 不同類別的樣本差別比較大,比如說正類和負類的樣本比例為50 1。處理樣本不平衡的原因 一般而已,如果類別不平衡比例超過4 1,那麼其分類器會大大地因為資料不平衡性而無法滿足分類要求的。因此在構建分類模型之前,需要對分類不均衡性問題進行處理。在前面,我們使用準確度這個指標來評價分類質量...

keras中處理樣本不平衡

參考文獻 兩者的區別為 class weight 主要針對的上資料不均衡問題,比如 異常檢測的二項分類問題,異常資料僅佔1 正常資料佔99 此時就要設定不同類對loss的影響。sample weight 主要解決的是樣本質量不同的問題,比如前1000個樣本的可信度,那麼它的權重就要高,後1000個樣...