簡體   English   中英

如何提高不平衡多類分類問題的 f1 分數,嘗試使用 smote 但它給出了不好的結果?

[英]how to improve f1 score for a imbalanced multiclass classification problem, tried using smote but it is giving bad results?

數據集: train.csv

方法

我有四個要預測的類別,它們確實非常不平衡,所以我嘗試使用 SMOTE 和前饋網絡,但與測試數據上的原始數據集相比,使用 smote 的結果非常差

model架構

#model architecture

from tensorflow.keras.layers import Dense, BatchNormalization, Dropout, Flatten

model = tf.keras.Sequential()

model.add(Dense(512, activation='relu', input_shape=(7, )))
model.add(BatchNormalization())
model.add(Dense(256, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(128, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(64, activation='relu'))
model.add(Dense(4, activation='softmax'))

earlystopping = tf.keras.callbacks.EarlyStopping(
    monitor="val_loss",
    patience=40,
    mode="auto",
    restore_best_weights=True,
)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()

那么如何解決這個問題並增加測試數據集上的 f1-score 任何幫助表示贊賞

以下是對您的案例的最佳方法的解釋。

擊打
  • 通常SMOTE通過隨機上采樣來平衡數據,因此即使您的數據樣本分布像Class A15000 條記錄Class B200 條記錄,它也會將Class B上采樣到15000 條記錄
  • 200 條記錄中生成太多隨機樣本有時會使 model 很難學習和區分類別,因為上采樣通過復制將 Class B 記錄從 200 條顯着增加到 15000 條。
可能的解決方案
  1. 我建議在訓練/測試之間嘗試分層采樣,而不是SMOTE ,然后嘗試在其上構建 model。
  2. 將 class 權重作為參數是另一種最佳方法,它幾乎適用於所有 ML 算法。 在您的 Keras 案例中,您可以在此處參考它可能會非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM