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())
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
添加回答
举报