在 Keras 中进行预测后无法创建混淆矩阵 - 无法处理多标签指示符的混合 [重复]

Posted

技术标签:

【中文标题】在 Keras 中进行预测后无法创建混淆矩阵 - 无法处理多标签指示符的混合 [重复]【英文标题】:Unable to create confusion matrix after prediction in Keras - Can't handle a mix of multilabel-indicator [duplicate] 【发布时间】:2021-05-03 20:43:16 【问题描述】:

我想用混淆矩阵评估我的 Keras 模型。但是,我无法让它工作,因为我总是遇到同样的错误:

ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets

我在看这个问题:

confusion matrix error "Classification metrics can't handle a mix of multilabel-indicator and multiclass targets"

我试图模仿一切,但它不起作用。我认为情况并非如此。

这是我的代码:

validationTweets = validation.content.tolist() #data for validation
validation_features = vectorizerCV.transform(validationTweets) #vectorizing data for validation

prediction = model.predict(validation_features , batch_size=32) # making prediction

realLabels = validation.sentiment # true labels/classes (STRING VALUES)
realLabels = np.asarray(realLabels.factorize()[0]) # converting them to categorical
realLabels = to_categorical(realLabels, num_classes = 3) # converting them to categorical

print('true labels type', type(realLabels))  #<class 'numpy.ndarray'>
print('true labels shape',realLabels.shape)  # (5000, 3)

print('prediction type', type(prediction))  #<class 'numpy.ndarray'>
print('prediction shape', prediction.shape) #(5000, 3)


matrix = confusion_matrix(realLabels, prediction)

这就是我的真实标签的样子:

[[1. 0. 0.]
 [1. 0. 0.]
 [0. 1. 0.]
 ...
 [0. 1. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

这是我的预测的样子:

[[8.6341507e-04 6.8435425e-01 3.1478229e-01]
 [8.4774427e-02 7.8772342e-01 1.2750208e-01]
 [4.3412593e-01 5.0705791e-01 5.8816209e-02]
 ...
 [9.1305929e-01 6.6390157e-02 2.0550590e-02]
 [8.2271063e-01 1.5146920e-01 2.5820155e-02]
 [1.7649201e-01 7.2304797e-01 1.0045998e-01]]

我试过这个:

prediction = [np.round(p, 0) for p in prediction]

ERROR: multilabel-indicator is not supported

我也试过这个:

prediction = prediction.argmax(axis = 1) # shape is (5000,)

ERROR:    ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets

但我遇到了同样的错误。

【问题讨论】:

尝试使用 predictions = prediction.argmax(axis = 1),然后将预测传递给 cm。我假设它们是 softmax 输出。 不起作用,我得到同样的错误,预测的新形状是 (5000,) 【参考方案1】:

我对 Keras confusion_matrix 不是很熟悉,但四舍五入的预测不适用于多类。对于每个样本,您需要采用概率最高的预测类别,并使该条目在您的预测中等于 1。例如:

pred = np.array([0.3, 0.3, 0.4])
rounded = np.round(pred) # Gives [0, 0, 0]
most_likely = np.zeros(3)
most_likely[pred >= np.max(pred)] = 1 # Gives [0,0,1]

【讨论】:

以上是关于在 Keras 中进行预测后无法创建混淆矩阵 - 无法处理多标签指示符的混合 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何创建混淆矩阵来评估模型?

TensorFlow:创建混淆矩阵时无法将图像转换为浮点数

R:如何为预测模型制作混淆矩阵?

从 keras 生成器获取真实标签

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?