如何得到Confusion matrix, Precision, Recall, F1 score, ROC curve, AUC graph?

问题描述 投票:0回答:1

我构建并训练了 CNN 模型,但不知道如何获得混淆矩阵、精度、召回率、F1 分数、ROC 曲线和 AUC 图。

我没有通过 sklearn 拆分数据集。手动将数据集拆分为训练、测试和验证。

import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras import layers
from tensorflow.keras import models
from tensorflow.keras import optimizers
from tensorflow.keras.preprocessing.image import load_img

train_datagen = ImageDataGenerator(rescale = 1./255,
                                  shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True,
                                   validation_split=0.2)

training_set = train_datagen.flow_from_directory(
    '/mnt/batch/tasks/shared/LS_root/mounts/clusters/saba19ec117/code/Users/saba19ec117/Project/train', 
    target_size = (250, 250), 
    batch_size = 32, 
    class_mode = 'binary')

validation_generator = train_datagen.flow_from_directory(
    '/mnt/batch/tasks/shared/LS_root/mounts/clusters/saba19ec117/code/Users/saba19ec117/Project/test', 
    target_size = (250, 250), 
    batch_size = 32, 
    class_mode = 'binary')

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), padding = 'valid', activation = 'relu', input_shape=(250, 250, 3)))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))

model.add(layers.Conv2D(64, (3, 3), padding = 'valid', activation = 'relu'))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))

model.add(layers.Dense(310, activation = 'relu'))

model.add(layers.Dropout(0.45))

model.add(layers.Dense(270, activation = 'relu'))

model.add(layers.Dense(1, activation = 'sigmoid'))

model.compile(loss = 'binary_crossentropy',
             optimizer = optimizers.Adam(learning_rate = 1e-4),
             metrics = ['accuracy'])
model.fit(training_set, 
      steps_per_epoch = 30,
          epochs = 25,
          validation_data = validation_generator,
          validation_steps = 9)


plt.plot(model.history.history['accuracy'])
plt.plot(model.history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()

    # Plot training & validation loss values
plt.plot(model.history.history['loss'])
plt.plot(model.history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()


你能告诉我如何在我的代码中获取混淆矩阵、精度、召回率、F1 分数、ROC 曲线和 AUC 图吗?

deep-learning conv-neural-network confusion-matrix roc precision-recall
1个回答
0
投票

您可以在代码末尾添加以下代码段。您应该将

num_of_test_samples
batch_size
作为定义的变量。

# Import libraries
from sklearn.metrics import classification_report, confusion_matrix

predictions = model.predict_generator(validation_generator, num_of_test_samples // batch_size+1, verbose=0)
y_pred = np.argmax(predictions, axis=1)

print('Confusion Matrix')
print(confusion_matrix(validation_generator.classes, y_pred))

print('Classification Report')
target_names=list(train_generator.class_indices.keys())
print(classification_report(validation_generator.classes, y_pred, target_names=target_names))
© www.soinside.com 2019 - 2024. All rights reserved.