Confusion Matrix-ValueError:发现样本数不一致的输入变量



为了再现性,我使用的训练和验证数据集在这里共享

CCD_ 1是CCD_ 2的基本事实。

我下面要做的是将数据集馈送到一个简单的CNN层中,该层提取图像的有用特征,并将其作为1D馈送到LSTM网络中进行分类。


from keras.models import Sequential
from keras.layers import Dense, Flatten, Activation
from keras.layers.convolutional import Conv1D
from keras.layers import LSTM
from keras.layers.convolutional import MaxPooling1D
from keras.layers import TimeDistributed
from keras.layers import Dropout
from keras import optimizers
from keras.callbacks import EarlyStopping
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
from confusion_matrix import plot_confusion_matrix
import scikitplot as skplt
from numpy import genfromtxt
train_set = genfromtxt('data/train/training_dataset.csv', delimiter=',') 
validation_set = genfromtxt('data/validation/validation_dataset.csv', delimiter=',') 

train_set = train_set[..., None] 
validation_set = validation_set[..., None]

X_train, X_test, y_train, y_test = train_test_split(train_set, validation_set, test_size=0.30, random_state=0)



batch_size=16
epochs=5
# Create the model

model = Sequential()
model.add(Conv1D(filters=5, kernel_size=3, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(50, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(10))
model.add(Dense(1,kernel_initializer='random_normal'))
model.add(Activation('relu'))
adam = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0)
sgd = optimizers.SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=adam, loss='mean_squared_error', metrics=['mae', 'mape', 'mean_squared_error', 'acc'])

model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs)

print(model.summary())

# Evaluate the model
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
skplt.metrics.plot_confusion_matrix(y_test, scores, x_tick_rotation=50, title=' ', normalize=True)

最后,我想用绘制模型的混淆矩阵

skplt.metrics.plot_confusion_matrix(y_test, scores, x_tick_rotation=50, title=' ', normalize=True)

但是,它正在引发一个错误ValueError: Found input variables with inconsistent numbers of samples: [5394, 5]

我们如何修复这个错误?

skplt.metrics.plot_confusion_matrix的第二个参数必须是预测标签(请参阅https://scikit-plot.readthedocs.io/en/stable/metrics.html)。但是,您通过了scores,它不包含预测的标签。

修复方法是:

y_pred = model.predict(X_test)
skplt.metrics.plot_confusion_matrix(y_test,
y_pred,
x_tick_rotation=50,
title=' ',
normalize=True)

几天前我正在研究SVM,当我试图绘制混淆矩阵时,以下几行代码对我有效。

predicted=model.predict(X_test) #predicted output
cm=metrics.confusion_matrix(y_test, predicted) 
df_cm = pd.DataFrame(cm, range(2), range(2))
sns.set(font_scale=1.4) 
sns.heatmap(df_cm, annot=True, annot_kws={"size": 16}) 
plt.title('CONFUSION MATRIX ',fontdict={'fontsize': 14, 'fontweight': 'bold'})
plt.show()

最新更新