我正在研究类不平衡的顺序标签问题。 我使用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保持不变。
哪个更好? 我是否想增加一些样品重量以获得更好的结果?谢谢!