我试图用一个高度不平衡的数据集执行二进制分类。我的目标值是0(84%)和1(16%)。我在模型中使用了class_weight,但少数类的精确度和召回率始终为0。我不确定我是否正确使用class_weights。我真的很感激任何帮助!
下面是我的代码:
class_weight = {0:1,1:50}
numpy.random.seed(5)
model = Sequential()
model.add(Dense(13,input_dim = 5, activation='relu'))
model.add(Dense(13, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss="binary_crossentropy", optimizer = "adam", metrics = ['accuracy'])
model.fit(X_train,Y_train, epochs = 10, batch_size = 30, class_weight = class_weight, validation_data = (X_test, Y_test))
preds = model.predict_classes(X_test)
print (classification_report(Y_test, preds))
precision recall f1-score support
0 0.83 1.00 0.91 24126
1 0.00 0.00 0.00 4879
2条答案
按热度按时间dfuffjeb1#
您说您的班级不平衡是84:16(大约5:1),但您将班级2发送为班级1的50倍。尝试5-10之间的某个值
zbwhf8kr2#
据我所知,你正在正确地使用它。我不确定你的数据集上的不平衡比率。如果你愿意,scikit-learn有一个function可以为你计算这个。
话虽如此,我个人更喜欢过采样/欠采样,而不是类权重。我最成功的算法叫做SMOTE。你绝对应该试试这个。