樣本不均衡解決方法 計算class weight

2021-10-24 14:46:30 字數 1310 閱讀 9057

2. 利用keras中的fit方法裡的引數

這裡介紹2.1:

直接先上**:

from sklearn.utils import class_weight

import pandas as pd

train_df = pd.read_csv("input/train.csv")

x_train = train_df['image']

y_train = train_df['class']

class_weight = class_weight.compute_class_weight('balanced',

np.unique(y_train),

y_train)

cw = dict(enumerate(class_weight))

引數型別為字典,將不同的類別對映為不同的權值,該引數用來在訓練過程中調整損失函式(只能用於訓練)。該引數在處理非平衡的訓練資料(某些類的訓練樣本數很少)時,可以使得損失函式對樣本數不足的資料更加關注。

原理解析:

compute_class_weight這個函式的作用是對於輸入的樣本,平衡類別之間的權重,下面寫段測試**測試這個函式:

# coding:utf-8

from sklearn.utils.class_weight import compute_class_weight

class_weight = 'balanced'

label = [0] * 9 + [1]*1 + [2, 2]

print(label) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2]

classes=[0, 1, 2]

weight = compute_class_weight(class_weight, classes, label)

print(weight) #[ 0.44444444 4. 2. ]

print(.44444444 * 9) # 3.99999996

print(4 * 1) # 4

print(2 * 2) # 4

如上圖所示,可以看到這個函式把樣本的平衡後的權重乘積為4,每個類別均如此。

計算公式:

# weight_ = n_samples / (n_classes * np.bincount(y))``

# 這裡

# n_samples為16

# n_classes為3

# np.bincount(y)實際上就是每個類別的樣本數量

樣本不均衡

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

樣本不均衡問題

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

樣本不均衡問題 bagging方法

bagging是一種用來提高學習演算法準確度的方法,這種方法通過構造乙個 函式系列,然後以一定的方式將它們組合成乙個 函式。它使用bootstrap抽樣,其基本思想是 將乙個弱學習演算法使用多次 每次使用乙個放回的重複抽樣 並對結果進行投票,最後選取投票多的結果作為最終的結果 也可以通過得票的平均值...