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

标签 python scikit-learn confusion-matrix

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

谢谢

最佳答案

此问题与输入矩阵中包含的唯一标签的数量有关。在您的第二个示例 block 中,它(正确地)构建了一个只有一个类的混淆矩阵,分别为 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]])

关于python - 如何使 sklearn.metrics.confusion_matrix() 始终返回 TP、TN、FP、FN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229965/

相关文章:

python - 删除文件中的多个 EOL

python - 为什么标签与 pandas、itertools 和 numpy 索引不一致?

python - Selenium,Xpath,选择节点内文本的特定部分

python - Discord.py 机器人在嵌入中未使用正确的文本格式,而仅在移动设备上使用?

python - 损失函数作为几个点的最小值,自定义损失函数和梯度

python - tf.confusion_matrix 和 InvalidArgumentError

python - 向量化时保留文本数据的顺序

python - Sklearn 和 GridSearchCV - 是否期望返回最佳参数?

R:我们如何打印 SVM 的准确率百分比

r - RTextTools 中的 Create_Analytics