【发布时间】:2019-10-20 21:57:54
【问题描述】:
我正在使用 Sklearn 对不平衡数据集进行分类。 Sklearn 计算了false_positive_rate 和true_positive_rate 错误;当我想计算 AUC 分数时,结果与我从混淆矩阵中得到的结果不同。
从 Sklearn 我得到以下混淆矩阵:
confusion = confusion_matrix(y_test, y_pred)
array([[ 9100, 4320],
[109007, 320068]], dtype=int64)
当然,我将输出理解为:
+-----------------------------------+------------------------+
| | Predicted | Predicted |
+-----------------------------------+------------------------+
| Actual | True positive = 9100 | False-negative = 4320 |
| Actual | False-positive = 109007 | True negative = 320068|
+--------+--------------------------+------------------------+
但是,对于 FPR 和 TPR,我得到了以下结果:
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_pred)
(false_positive_rate, true_positive_rate)
(array([0. , 0.3219076, 1. ]),
array([0. , 0.7459488, 1. ]))
结果与confusion_matrix 不同。根据我的表格,FPR实际上是FNR,而TPR实际上是TNR。然后我检查了confusion matrix document,我发现:
因此,在二元分类中,真负数为 C0,0,假负数为 C1,0,真正数为 C1,1,假正数为 C0,1。
这意味着根据 Sklearn,confusion_matrix 看起来像这样:
+-----------------------------------+---------------------------+
| | Predicted | Predicted |
+-----------------------------------+---------------------------+
| Actual | True-Positive = 320068 | False-Negative = 109007 |
| Actual | False-Positive = 4320 | True-Negative = 9100 |
+--------+--------------------------+---------------------------+
根据理论,对于二元分类,稀有类表示为正类。
为什么 Sklearn 将多数类视为积极的?
【问题讨论】:
-
你的实际类标签是什么?
-
少数群体的类别标签为0,多数群体为1。
-
我现在切换了这两个类的类标签,得到了正确的答案。似乎 Sklearn 将 1 视为正类,将 0 视为负类。
-
是的,这正是原因——不出所料,1 被视为正类
标签: machine-learning scikit-learn confusion-matrix