簡體   English   中英

如何讓sklearn.metrics.confusion_matrix()始終返回TP,TN,FP,FN?

[英]How to make sklearn.metrics.confusion_matrix() to always return TP, TN, FP, FN?

我正在使用sklearn.metrics.confusion_matrix(y_actual, y_predict)來提取tn,fp,fn,tp,並且大部分時間它都能完美地運行。

from sklearn.metrics import confusion_matrix

y_actual, y_predict = [1,1,1,1], [0,0,0,0]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [0 0 4 0]   # ok

y_actual, y_predict = [1,1,1,1],[0,1,0,1]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [0 0 2 2]   # ok

但是,在某些情況下,confusion_matrix()並不總是返回這些信息,我會得到ValueError,如下所示。

from sklearn.metrics import confusion_matrix

y_actual, y_predict = [0,0,0,0],[0,0,0,0]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [4]    # ValueError: not enough values to unpack (expected 4, got 1)

y_actual, y_predict = [1,1,1,1],[1,1,1,1]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel()
>>> [4]    # ValueError: not enough values to unpack (expected 4, got 1)

我的臨時解決方案是編寫自己的函數來提取這些信息。 有什么方法可以強制confusion_matrix()總是返回tn,fp,fn,tp輸出?

謝謝

此問題與輸入矩陣中包含的唯一標簽數有關。 在你的第二個例子中,它(正確地)構建一個只有一個類的混淆矩陣,分別為0或1。

要強制它輸出兩個類,即使沒有預測其中一個類,也要使用label屬性。

y_actual, y_predict = [0,0,0,0],[0,0,0,0]
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict, labels=[0,1]).ravel()
>> array([[4, 0],
          [0, 0]])

暫無
暫無

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

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