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抽樣,其基本思想是 將乙個弱學習演算法使用多次 每次使用乙個放回的重複抽樣 並對結果進行投票,最後選取投票多的結果作為最終的結果 也可以通過得票的平均值...