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