### 从CNN模型绘制混淆矩阵

此原创作品在此处展示 这里

如何基于CNN模型绘制混淆矩阵?

import numpy as npfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Convolution2D, Conv2D, MaxPooling2D, GlobalAveragePooling2Dfrom keras.optimizers import Adamfrom keras.utils import np_utilsfrom sklearn import metrics ##Need to put this block of code in for cuDNN to initialize properlyimport tensorflow as tfconfig = tf.compat.v1.ConfigProto(gpu_options = tf.compat.v1.GPUOptions(per_process_gpu_memory_fraction=0.8)# device_count = {'GPU': 1})config.gpu_options.allow_growth = Truesession = tf.compat.v1.Session(config=config)tf.compat.v1.keras.backend.set_session(session)#------------------------------------------------------------------------------------------------------------------num_rows = 40num_columns = 174num_channels = 1x_train = x_train.reshape(x_train.shape[0], num_rows, num_columns, num_channels)x_test = x_test.reshape(x_test.shape[0], num_rows, num_columns, num_channels)num_labels = yy.shape[1]filter_size = 2# Construct model model = Sequential()model.add(Conv2D(filters=16, kernel_size=2, input_shape=(num_rows, num_columns, num_channels), activation='relu'))model.add(MaxPooling2D(pool_size=2))model.add(Dropout(0.2))model.add(Conv2D(filters=32, kernel_size=2, activation='relu'))model.add(MaxPooling2D(pool_size=2))model.add(Dropout(0.2))model.add(Conv2D(filters=64, kernel_size=2, activation='relu'))model.add(MaxPooling2D(pool_size=2))model.add(Dropout(0.2))model.add(Conv2D(filters=128, kernel_size=2, activation='relu'))model.add(MaxPooling2D(pool_size=2))model.add(Dropout(0.2))model.add(GlobalAveragePooling2D())model.add(Dense(num_labels, activation='softmax'))

然后进行训练如下:

from keras.callbacks import ModelCheckpoint from datetime import datetime #num_epochs = 12#num_batch_size = 128num_epochs = 72num_batch_size = 256checkpointer = ModelCheckpoint(filepath='saved_models/weights.best.basic_cnn.hdf5',                                verbose=1, save_best_only=True)model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs, validation_data=(x_test, y_test), callbacks=[checkpointer], verbose=1)

我尝试了几种方法,其中一种是:

import matplotlib.pyplot as pltplt.figure(figsize=(12, 4))plot_confusion_matrix=(model(),x_test, y_test)plt.plot(plot_confusion_matrix)

但我无法绘制出混淆矩阵。

我也查看了 tf.math.confusion_matrix(),但在上述CNN模型中,labelspredictions 应该如何定义?

混淆矩阵是多分类问题。

y_true = np.argmax(y_test, 1) 吗?

y_pred = model.predict_classes(x_test) 吗?


回答:

labels: 分类任务的真实标签的一维张量。predictions: 给定分类任务的预测的一维张量。

正如官方文档中所说,labels 是输出类的名称,而predictions 是预测。然而,由于它们必须是一维张量,这意味着labels 将是单个实例的真实值,而Predictions 中对应的索引值将保存其预测值。因此,您可以做的就是获取每个实例的预测和标签,在您的代码中,您传递了 x_test 和 y_test,这些不是应该传递的元素。相反,使用 model.predict 来获取输出标签。

y_predict=model.predict(x_test)y_true=y_testres = tf.math.confusion_matrix(y_true,y_predict)

现在这个 res 是一个二维矩阵,要打印它,您需要

 plot_confusion_matrix(classifier, X_test, y_test,                             display_labels=class_names,                             cmap=plt.cm.Blues,                             normalize=normalize)

这里设置 classifier = “model”,而不是函数模型 model()。希望这对您有帮助,以下是一些额外的资源。

在这里您可以看到多分类混淆矩阵技术。

多分类绘图 GitHub 函数

另一个自定义绘图函数

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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