簡體   English   中英

是否有一種簡單的方法來獲得多類分類的混淆矩陣? (OneVsRest)

[英]Is there an easy way to get confusion matrix for multiclass classification? (OneVsRest)

我在三類分類問題上使用OneVsRest分類器(三個隨機森林)。 每個類的出現都是我的虛擬整數(1表示發生,0表示否則)。 我想知道是否有一種簡單的替代方法來創建混淆矩陣? 正如我遇到的所有方法一樣,以y_pred,y_train = array,shape = [n_samples]的形式獲取參數。 理想情況下,我想要y_pred,y_train = array,shape = [n_samples,n_classes]

一些樣本,類似於問題的結構:

y_train = np.array([(1,0,0), (1,0,0), (0,0,1), (1,0,0), (0,1,0)])
y_pred = np.array([(1,0,0), (0,1,0), (0,0,1), (0,1,0), (1,0,0)])


print(metrics.confusion_matrix(y_train, y_pred) 

退貨:不支持多標簽指標

我不知道你有什么想法,因為你沒有指定你想要的輸出,但是有兩種方法可以解決它:

1.每列一個混淆矩陣

In [1]:
for i in range(y_train.shape[1]):
    print("Col {}".format(i))
    print(metrics.confusion_matrix(y_train[:,i], y_pred[:,i]))
    print("")

Out[1]:
Col 0
[[1 1]
 [2 1]]

Col 1
[[2 2]
 [1 0]]

Col 2
[[4 0]
 [0 1]]

2.一個混淆矩陣

為此,我們將展平數組:

In [2]: print(metrics.confusion_matrix(y_train.flatten(), y_pred.flatten()))

Out[2]:
[[7 3]
 [3 2]]

您可以嘗試以下方式一次性獲取所有詳細信息。

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test.argmax(axis=1), y_pred.argmax(axis=1))

這將為您提供如下內容:

array([[ 7,  0,  0,  0],
       [ 0,  7,  0,  0],
       [ 0,  1,  2,  4],
       [ 0,  1,  0, 11]])  

- 這意味着所有對角線都能正確預測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM