如何使 sklearn.metrics.confusion_matrix() 始终 return 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() 并不总是 return 这些信息,我会得到如下所示的 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()
始终 return tn、fp、fn、tp 输出?
谢谢
此问题与输入矩阵中包含的唯一标签的数量有关。在您的第二个示例块中,它(正确地)构建了一个只有一个 class 的混淆矩阵,分别为 0 或 1。
要强制它输出两个 classes,即使其中一个未预测到,请使用 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]])
我正在使用 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() 并不总是 return 这些信息,我会得到如下所示的 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()
始终 return tn、fp、fn、tp 输出?
谢谢
此问题与输入矩阵中包含的唯一标签的数量有关。在您的第二个示例块中,它(正确地)构建了一个只有一个 class 的混淆矩阵,分别为 0 或 1。
要强制它输出两个 classes,即使其中一个未预测到,请使用 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]])