使用 scikit-learn 指标评估 Keras 模型

数据挖掘 喀拉斯 scikit-学习 评估
2022-03-04 00:48:42

Keras 如何计算准确率、精确度、召回率和 AUC?我通过使用keras.losses.CategoricalCrossentropy()损失函数创建了一个分类分类(即多个类)模型,并且在该model.compile()方法中我指定了以下指标:

METRICS = [
    keras.metrics.CategoricalAccuracy(name='acc'),
    keras.metrics.Precision(name='precision'),
    keras.metrics.Recall(name='recall'),
    keras.metrics.AUC(name='auc'),
]

当我评估模型时model.evaluate(X_test, y_test, verbose=2),结果如下:

147/147 - 1s - 损失:0.5127 - acc:0.8073 - 精度:0.8437 - 召回:0.7696 - auc:0.9537

然后,我想将其性能与使用其他算法(例如,DecisionTreeClassifier()在 scikit-learn 中实现)获得的结果进行比较。

为了评估其他分类器,我使用以下内容:

from sklearn.metrics import balanced_accuracy_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score

print("AUC: %2.3f" % roc_auc_score(y_test, pred_bin))
print("ACC: %2.3f" % balanced_accuracy_score(lb.inverse_transform(y_test), pred))
print("PRE: %2.3f" % precision_score(lb.inverse_transform(y_test), pred, average='weighted'))
print("REC: %2.3f" % recall_score(lb.inverse_transform(y_test), pred, average='weighted'))

然而,当我用这段代码测试我的神经网络的性能时,我得到了以下结果:

ACC:0.715 PRE:0.801 REC:0.807 AUC:0.920

model.evaluate()如您所见,结果与使用Keras获得的结果不同。我怎样才能公平地比较不同的方法?

1个回答

您可以使用 class KerasClassifierfrom keras.wrappers.scikit_learn,它将 Keras 模型包装在 scikit-learn 接口中,以便可以像其他 scikit-learn 模型一样使用它,然后您可以使用 scikit-learn 的评分函数对其进行评估,例如:

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.metrics import roc_curve, auc

keras_model = ...
classifier = KerasClassifier(keras_model, batch_size=32)
y_pred_keras = classifier.predict(X_test).ravel()
fpr, tpr, thresholds = roc_curve(y_test, y_pred_keras)
auc_score = auc(fpr, tpr)

您可以在Keras 文档上找到更多信息,或者在谷歌上搜索(例如thisthis)。