Keras用于训练和验证的sample_weight不能改善少数群体的分类

时间:2019-03-12 09:46:19

标签: tensorflow keras metrics loss-function multiclass-classification

我正在研究类不平衡的顺序标签问题。 我使用keras sample_weight来改善对少数类的检测,但这无济于事。 我想念什么?

我的不平衡输出类与class_weight平衡:

testdf.pivot(index="Student_id",columns="Subject")

我正在model.compile和model.fit中设置所需的参数

class_weights = {0: 0.0  # ignore padding, mask_zero = True
                 1: 1.6
                 2: 0.44
                 3: 11.0
train_sample_weight = np.array([class_weights[cls] for cls in y_train])
val_sample_weight = np.array([class_weights[cls] for cls in y_val])

但是我的分类结果没有改变。 对我来说重要的是第1类。我想提高其检测率。

有样品重量:

model.compile(optimizer="rmsprop", 
         loss="categorical_crossentropy", 
         sample_weight_mode="temporal", metrics=["accuracy"])

model.fit(X_train, y_train, batch_size=32, epochs=20,
         sample_weight=train_sample_weight,
         validation_data=[X_val, y_val, val_sample_weight])

没有样品重量

              precision    recall  f1-score   support

           0       0.00      0.00      0.00         0
           1       0.54      0.91      0.68      2354
           2       0.97      0.77      0.86      8214
           3       0.61      0.83      0.70       333

   micro avg       0.80      0.80      0.80     10901
   macro avg       0.53      0.62      0.56     10901
weighted avg       0.86      0.80      0.81     10901

[[   0    0    0    0]
 [   0 2132  209   13]
 [   1 1739 6309  165]
 [   0   42   16  275]]

这些clf报告是根据验证数据生成的。在测试数据以及不同的模型架构上,结果相似。

对于第1类,我发现使用样本权重,召回率更高,但精度下降。总体而言-f1保持不变。

哪个更好? 我是否想增加一些样品重量以获得更好的结果?谢谢!

0 个答案:

没有答案