我有一个多输出(200)二进制分类模型,我在keras中写道 .
在这个模型中,我想添加其他指标,如ROC和AUC,但据我所知,keras没有内置的ROC和AUC指标函数 .
我试图从scikit-learn导入ROC,AUC功能
from sklearn.metrics import roc_curve, auc
from keras.models import Sequential
from keras.layers import Dense
.
.
.
model.add(Dense(200, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(400, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(200,init='normal', activation='softmax')) #outputlayer
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy','roc_curve','auc'])
但它给出了这个错误:
例外:无效的指标:roc_curve
我应该如何添加ROC,AUC到keras?
5 回答
由于您无法通过小批量计算ROC和AUC,因此您只能在一个时期结束时计算它 . 有一个来自jamartinh的解决方案,为方便起见,我修补了下面的代码:
A more hackable way using tf.contrib.metrics.streaming_auc:
我这样解决了我的问题
考虑您有功能的测试数据集 x_test 和相应目标的 y_test .
首先,我们使用训练模型预测特征中的目标
然后从sklearn我们导入roc_auc_score函数然后简单地将原始目标和预测目标传递给函数 .
以下解决方案适合我:
和你一样,我更喜欢使用scikit-learn的内置方法来评估AUROC . 我发现在keras中执行此操作的最佳和最简单的方法是创建自定义指标 . 如果tensorflow是你的后端,那么实现这一点可以在很少的代码行中完成:
如其他答案中所述,创建自定义回调将不适用于您的情况,因为您的模型具有多个输出,但这将起作用 . 另外,该方法允许在训练和验证数据上评估度量,而keras回调不能访问训练数据,因此仅可用于评估训练数据的性能 .
'roc_curve','auc'不是标准指标,你不能将它们传递给指标变量,这是不允许的 . 你可以传递像'fmeasure'这样的标准指标 .
在此处查看可用的指标:https://keras.io/metrics/您可能还想查看制作自己的自定义指标:https://keras.io/metrics/#custom-metrics
另请查看本博客中为ROC,AUC提及的generate_results方法... https://vkolachalama.blogspot.in/2016/05/keras-implementation-of-mlp-neural.html