如何计算keras中的接收 *** 作特性(ROC)和AUC?

如何计算keras中的接收 *** 作特性(ROC)和AUC?,第1张

概述我有一个多输出(200)二进制分类模型,我在keras中写道. 在这个模型中,我想添加其他指标,如ROC和AUC,但据我所知,keras没有内置的ROC和AUC指标函数. 我试图从scikit-learn导入ROC,AUC功能 from sklearn.metrics import roc_curve, aucfrom keras.models import Sequentialfrom ke 我有一个多输出(200)二进制分类模型,我在keras中写道.

在这个模型中,我想添加其他指标,如ROC和AUC,但据我所知,keras没有内置的ROC和AUC指标函数.

我试图从scikit-learn导入ROC,AUC功能

from sklearn.metrics import roc_curve,aucfrom keras.models import Sequentialfrom 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(200,init='normal',activation='softmax')) #outputlayermodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy','roc_curve','auc'])

但它给出了这个错误:

Exception: InvalID metric: roc_curve

我应该如何添加ROC,AUC到keras?

解决方法 由于您无法通过小批量计算ROC和AUC,因此您只能在一个时期结束时计算它.从 jamartinh开始有一个解决方案,为方便起见,我修补了下面的代码:

from sklearn.metrics import roc_auc_scorefrom keras.callbacks import Callbackclass roc_callback(Callback):    def __init__(self,training_data,valIDation_data):        self.x = training_data[0]        self.y = training_data[1]        self.x_val = valIDation_data[0]        self.y_val = valIDation_data[1]    def on_train_begin(self,logs={}):        return    def on_train_end(self,logs={}):        return    def on_epoch_begin(self,epoch,logs={}):        return    def on_epoch_end(self,logs={}):        y_pred = self.model.predict(self.x)        roc = roc_auc_score(self.y,y_pred)        y_pred_val = self.model.predict(self.x_val)        roc_val = roc_auc_score(self.y_val,y_pred_val)        print('\rroc-auc: %s - roc-auc_val: %s' % (str(round(roc,4)),str(round(roc_val,4))),end=100*' '+'\n')        return    def on_batch_begin(self,batch,logs={}):        return    def on_batch_end(self,logs={}):        returnmodel.fit(X_train,y_train,valIDation_data=(X_test,y_test),callbacks=[roc_callback(training_data=(X_train,y_train),y_test))])

使用tf.contrib.metrics.streaming_auc的更具攻击性的方法:

import numpy as npimport tensorflow as tffrom sklearn.metrics import roc_auc_scorefrom sklearn.datasets import make_classificationfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.utils import np_utilsfrom keras.callbacks import Callback,EarlyStopPing# define roc_callback,inspired by https://github.com/keras-team/keras/issues/6050#issuecomment-329996505def auc_roc(y_true,y_pred):    # any tensorflow metric    value,update_op = tf.contrib.metrics.streaming_auc(y_pred,y_true)    # find all variables created for this metric    metric_vars = [i for i in tf.local_variables() if 'auc_roc' in i.name.split('/')[1]]    # Add metric variables to GLOBAL_VARIABLES collection.    # They will be initialized for new session.    for v in metric_vars:        tf.add_to_collection(tf.GraphKeys.GLOBAL_VARIABLES,v)    # force to update metric values    with tf.control_dependencIEs([update_op]):        value = tf.IDentity(value)        return value# generation a small datasetN_all = 10000N_tr = int(0.7 * N_all)N_te = N_all - N_trX,y = make_classification(n_samples=N_all,n_features=20,n_classes=2)y = np_utils.to_categorical(y,num_classes=2)X_train,X_valID = X[:N_tr,:],X[N_tr:,:]y_train,y_valID = y[:N_tr,y[N_tr:,:]# model & trainmodel = Sequential()model.add(Dense(2,activation="softmax",input_shape=(X.shape[1],)))model.compile(loss='categorical_crossentropy',auc_roc])my_callbacks = [EarlyStopPing(monitor='auc_roc',patIEnce=300,verbose=1,mode='max')]model.fit(X,y,valIDation_split=0.3,shuffle=True,batch_size=32,nb_epoch=5,callbacks=my_callbacks)# # or use independent valID set# model.fit(X_train,#           valIDation_data=(X_valID,y_valID),#           batch_size=32,#           callbacks=my_callbacks)
总结

以上是内存溢出为你收集整理的如何计算keras中的接收 *** 作特性(ROC)和AUC?全部内容,希望文章能够帮你解决如何计算keras中的接收 *** 作特性(ROC)和AUC?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1191025.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存