我有一个二进制分类问题,每个类的示例数量均衡。在测试集上测试分类器的性能时,如果我使用两个类中的所有示例,我的准确率为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))
为什么我会得到不加起来的结果?我的设置非常简单,所以我确信我的代码中没有错误。谢谢!
答案 0 :(得分:1)
我无法找到代码中的哪个位置来分隔类以测试每个类。
但是在np.mean(hist.history["val_acc"])
中获取历史记录的平均值存在很大问题。
历史的演变,你开始时的准确性很差,每个时代都会提升价值。当然,唯一可以比较的价值是最后一个。