如何在Python中为自定义的ANN模型构建ROC曲线?

我正在尝试在Python中构建一个自定义的ANN模型。我构建模型的方法如下:

def binary_class(x_train,nodes,activation,n):  #Creating customized ANN Model  model=Sequential()  for i in range(len(nodes)):    if(i==0):      if(activation=='sigmoid'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_uniform',activation='sigmoid',input_dim = len(x_train[1])))      if(activation=='relu'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_uniform',activation='relu',input_dim = len(x_train[1])))      if(activation=='tanh'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_normal',activation='tanh',input_dim = len(x_train[1])))      if(activation=='softmax'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_normal',activation='softmax',input_dim = len(x_train[1])))      if(activation== 'elu'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_normal',activation='elu',input_dim = len(x_train[1])))      if(activation=='softplus'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_normal',activation='softplus',input_dim = len(x_train[1])))    else:      if(activation=='sigmoid'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_uniform',activation='sigmoid'))      if(activation=='relu'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_uniform',activation='relu'))      if(activation=='tanh'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_normal',activation='tanh'))      if(activation=='softmax'):        model.add(Dense(units = nodes[i], kernel_initializer = 'glorot_uniform',activation='softmax'))      if(activation=='elu'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_normal',activation='elu'))      if(activation=='softplus'):        model.add(Dense(units = nodes[i], kernel_initializer = 'he_normal',activation='softplus'))    model.add(Dropout(n))  #Adding output layer  model.add(Dense(units=1, kernel_initializer = 'glorot_uniform',activation='sigmoid'))  return model

我的优化器函数如下:

def optibin(model,opt,x_train,y_train,spl,bs,epochs,x_test,y_test):  #Choosing the proper optimizer to use  if(opt=='sgd'):    print("Enter Momentum:")    mom=float(input())    lr=float(input("Enter value of Learning rate:"))    opti=keras.optimizers.SGD(learning_rate=lr, momentum=mom, nesterov=False)  if(opt=='Adam'):    lr=float(input("Enter value of Learning rate:"))    opti=keras.optimizers.Adam(learning_rate=lr)  if(opt=='Adamax'):    lr=float(input("Enter value of Learning rate:"))    beta_1=float(input("Enter value of beta 1 (Generally close to 1)"))    beta_2=float(input("Enter value of beta 2 (Generally close to 1)"))    opti=keras.optimizers.Adamax(learning_rate=lr, beta_1=beta_1, beta_2=beta_2)  if(opt=='Nadam'):    lr=float(input("Enter value of Learning rate:"))    beta_1=float(input("Enter value of beta 1 (Generally close to 1)"))    beta_2=float(input("Enter value of beta 2 (Generally close to 1)"))    opti=keras.optimizers.Nadam(learning_rate=lr, beta_1=beta_1, beta_2=beta_2)  if(opt=='RMSprop'):    lr=float(input("Enter value of Learning rate:"))    opti=keras.optimizers.RMSprop(learning_rate=lr)  if(opt=='Adagrad'):    lr=float(input("Enter value of Learning rate:"))    opti=keras.optimizers.Adagrad(learning_rate=lr)  model.compile(optimizer = opti, loss = 'binary_crossentropy', metrics = ['accuracy'])  model_history=model.fit(x_train, y_train,validation_split=spl, batch_size = bs,epochs = epochs)  return model_history, model

我需要尝试创建模型的性能指标,其中之一是构建ROC和AUC。我使用sklearn来制作混淆矩阵、特异性和敏感性。但我还需要制作一个ROC曲线。如何从这个模型中构建ROC曲线呢?


回答:

像这样的代码应该可以解决问题:

from sklearn import metricsfpr, tpr, thresholds = metrics.roc_curve(true_values, predicted_values, pos_label=1)roc_auc = metrics.auc(fpr, tpr)lw = 2plt.figure()plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--', alpha=0.15)plt.plot(fpr, tpr, lw=lw, label=f'ROC curve (area = {roc_auc: 0.2f})')plt.xlabel('(1–Specificity) - False Positive Rate')plt.ylabel('Sensitivity - True Positive Rate')plt.title(f'Receiver Operating Characteristic')plt.legend(loc="lower right")plt.show()

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注