Binary 二元分类-计算每个类别的平均准确度并不等于总体准确度

Binary 二元分类-计算每个类别的平均准确度并不等于总体准确度,binary,keras,classification,floating-accuracy,Binary,Keras,Classification,Floating Accuracy,我有一个二进制分类问题,每个类有平衡数量的例子。在测试集上测试分类器的性能时,如果使用这两个类中的所有示例,则准确率为79.87%。然而,当单独对类别进行测试时,每个类别1的准确度为73.41%,每个类别2的准确度为63.31%。问题是,如果我计算两个类的平均精度,即(73.41+63.31)/2=68.36%,这并不等于79.87% 这怎么可能?我正在使用Keras的model.evaluate函数,以获得准确的数字。我的代码如下: model.compile(loss='binary_cr

我有一个二进制分类问题,每个类有平衡数量的例子。在测试集上测试分类器的性能时,如果使用这两个类中的所有示例,则准确率为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))

为什么我得到的结果不符合逻辑?我的设置非常简单,所以我确信我的代码中没有bug。谢谢大家!

我找不到您在代码中的何处分离类来测试每个类

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

随着历史的发展,你一开始就非常准确,每一个时代都在提升价值。当然,唯一可以比较的值是最后一个

在所有情况下,它们是否(完全)是“相同的样本”此外,您还应该计算
(acc0*samples0+acc1*samples1)/(samples0+samples1)