如何使sklearn.metrics.confusion_matrix()始终返回TP、TN、FP和FN?

15

我正在使用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输出?

谢谢

1个回答

24

这个问题与输入矩阵中包含的唯一标签数有关。在您的第二个示例块中,它(正确地)使用仅一个类构建混淆矩阵,分别为0或1。

如果要强制输出两个类,即使其中一个没有被预测,请使用

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]])

哇,这太完美了!非常感谢你。 - Scoodood
所以 ravel 是函数。 - Kenry Sanchez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接