【问题标题】:Binary classification - computing average of accuracy per class does not equal overall accuracy二进制分类 - 计算每个类别的平均准确度不等于整体准确度
【发布时间】:2018-09-22 13:03:52
【问题描述】:

我有一个二进制分类问题,每个类的示例数量平衡。在测试集上测试分类器的性能时,如果我使用两个类的所有示例,我得到的准确率为 79.87%。但是,在单独测试类时,每类 1 的准确度为 73.41 %,每类 2 的准确度为 63.31 %。问题是,如果我计算两个类的平均准确率,即 (73.41 + 63.31) /2 = 68.36 %,不等于 79.87 %。

这怎么可能?我正在使用 Keras 的 model.evaluate 函数来获取准确度数字。我的代码如下:

 model.compile(loss='binary_crossentropy',
            optimizer=optim,
            metrics=['accuracy'])

earlystop = EarlyStopping(monitor='val_acc', min_delta=0.001, patience=5, verbose=0, mode='auto')
callbacks_list = [earlystop]

X_train, y_train, X_val, y_val = data()
hist = model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=30, batch_size=batch_size, shuffle=True, callbacks=callbacks_list)
#get training accuracy
training_accuracy = np.mean(hist.history["acc"])
validation_accuracy = np.mean(hist.history["val_acc"])
print("Training accuracy: %.2f%%" % (training_accuracy * 100))
print("Validation accuracy: %.2f%%" % (validation_accuracy * 100))

scores = model.evaluate(X_test, y_test, verbose=2)
y_pred = model.predict_classes(X_test)
print(metrics.classification_report(y_test, y_pred))
print("Testing loss: %.2f%%" % (scores[0]))
print("Testing accuracy: %.2f%%" % (scores[1]*100))

为什么我得到的结果不相加?我的设置非常简单,所以我确信我的代码中没有错误。谢谢!

【问题讨论】:

  • 在所有情况下它们(完全)都是“相同的样本”吗? // 另外,你应该计算(acc0*samples0 + acc1*samples1) / (samples0+samples1)

标签: binary keras classification floating-accuracy


【解决方案1】:

我找不到您在代码中将类分开以测试每个类的位置。

但是取np.mean(hist.history["val_acc"])中历史的平均值有一个很大的问题。

历史在发展,你从可怕的准确性开始,每个时代都会提高价值。当然,唯一可以比较的值是最后一个。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2021-09-03
    • 2018-10-01
    • 2020-01-03
    • 2021-11-02
    • 2015-09-29
    相关资源
    最近更新 更多