[英]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.