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
添加回答
舉報