繁体   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