为了账号安全,请及时绑定邮箱和手机立即绑定

我无法理解使用 argmax() 删除 OHE 后得到的混淆矩阵

我无法理解使用 argmax() 删除 OHE 后得到的混淆矩阵

智慧大石 2023-07-11 14:52:26
我无法解释我的混淆矩阵。我遇到了低于价值的错误。ValueError:不支持多标签指示器阅读大量帖子后,我意识到该问题可能是由于预测中的OHE(一种热门编码)造成的。因此,为了解决这个问题,我按照各种帖子中的建议使用了 argmax() 。下面是我的代码:from sklearn.metrics import confusion_matrixprint(Y.shape)print(predictions.shape)print(Y)print(predictions)# print(confusion_matrix(Y, predictions))print(confusion_matrix(Y.argmax(axis = 1), predictions.argmax(axis = 1)))(1, 200)(1, 200)[[1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0  0 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 1 1 1 0 0 0 1  0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1  0 0 0 1 0 1 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 1 0 0 0 1 0  0 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 1 1  0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0]][[1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 1 0 0  0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 0 0 1  0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 1  0 0 0 1 0 1 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 0 0 0  0 0 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1 0 1 1 1 1 0  0 1 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1]][[1]]从输出中可以看出,我得到的[[1]]是混淆矩阵。我不知道如何解释它。我期待一个 2x2 混淆矩阵,然后我会继续计算精度、召回率、F1 分数等,以了解我的模型的性能。请建议我做错了什么?
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

IIUC 的问题在于输入数组的形状。你需要先把它们压平。这是重现您的案例的示例:


from sklearn.metrics import confusion_matrix


Y = np.random.choice([0,1],size=(1,10))

pred = np.random.choice([0,1],size=(1,10))

由于两个数组都是二维的,如您的示例所示,confusion_matrix因此解释您具有多标签输出,但它不支持:


confusion_matrix(Y, pred)

ValueError: multilabel-indicator is not supported

您需要展平两个数组:


confusion_matrix(Y.ravel(), pred.ravel())


查看完整回答
反对 回复 2023-07-11
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

考虑到其他信息,输出是正确的。由于 Y 形状为 (1,200),这表明您有 1 个样本,其中有 200 个类。当你对此执行 argmax() 时,你将得到大小为 (1,1) 的输出。混淆矩阵的大小为 (n_classes, n_classes)。由于只有一个样本,因此混淆矩阵的大小将为 (1,1)。


为了解决这个问题,要么您需要传递多个样本,要么确保 argmax 正在执行预期的操作(即您确定输出是 OHE)?如果您的输出不是 OHE,那么您只需在获得混淆矩阵之前重新调整预测即可。


from sklearn.metrics import confusion_matrix


Y = np.squeeze(Y) #should result in shape (200,)

predictions = np.squeeze(predictions) #should result in shape (200,)


cf = confusion_matrix(Y, predictions) #should result in shape (2, 2) if 2 classes 


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信