【发布时间】:2016-04-14 09:10:29
【问题描述】:
我正在训练 ML 逻辑分类器以使用 python scikit-learn 对两个类进行分类。它们处于极度不平衡的数据中(大约 14300:1)。我得到了几乎 100% 的准确率和 ROC-AUC,但准确率、召回率和 f1 得分为 0%。我知道准确度通常在非常不平衡的数据中没有用,但为什么 ROC-AUC 测量也接近完美?
from sklearn.metrics import roc_curve, auc
# Get ROC
y_score = classifierUsed2.decision_function(X_test)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(false_positive_rate, true_positive_rate)
print 'AUC-'+'=',roc_auc
1= class1
0= class2
Class count:
0 199979
1 21
Accuracy: 0.99992
Classification report:
precision recall f1-score support
0 1.00 1.00 1.00 99993
1 0.00 0.00 0.00 7
avg / total 1.00 1.00 1.00 100000
Confusion matrix:
[[99992 1]
[ 7 0]]
AUC= 0.977116255281
上面使用逻辑回归,下面使用决策树,决策矩阵看起来几乎相同,但AUC却大不相同。
1= class1
0= class2
Class count:
0 199979
1 21
Accuracy: 0.99987
Classification report:
precision recall f1-score support
0 1.00 1.00 1.00 99989
1 0.00 0.00 0.00 11
avg / total 1.00 1.00 1.00 100000
Confusion matrix:
[[99987 2]
[ 11 0]]
AUC= 0.4999899989
【问题讨论】:
-
你可能想给我们混淆矩阵。直觉上,我猜这是不可能的,但我现在没有时间做数学。
-
感谢您的建议,我已经添加了代码和结果
-
解释:你没有任何可预测性。您基本上没有第 1 类的示例,并且预测全部错误。你最好一直预测
0。 -
是的,我明白了,但这会影响准确性和 AUC-ROC 测量吗?还是我的 AUC-ROC 计算错误?
-
是的,你的模型准确率高,AUC高,你问的是这个吗?但那是因为您的测试集中几乎所有数据都是 0,而且您基本上只预测零。不,这并不表明您的模型有用。我试图给你一个直觉。比较始终预测为 0 的模型的 AUC 和准确度。显然这不是一个有用的模型。但它会得分更好。这是由于测试集的结构。获得一个平衡的测试集,事情就会变得更加清晰。
标签: machine-learning classification roc precision-recall