2016-01-09 32 views
4

我正在训练ML逻辑分类器以使用python scikit-learn对两个类进行分类。他们处于非常不平衡的数据(约14300:1)。我的准确性和ROC-AUC几乎达到100%,但精确度,召回率和f1得分分别为0%。我知道准确度通常对非常不平衡的数据没有用,但为什么ROC-AUC指标也接近完美呢?如何解释几乎完美的准确性和AUC-ROC,但零f1分数,精度和召回

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 
+0

你可能想给我们混淆矩阵。直觉上,我猜想这是不可能的,但我现在没有时间去做数学。 – cel

+0

感谢您的建议,我添加了代码和结果 – KubiK888

+0

解释:您没有任何可预测性。你基本上没有类1的例子,并预测所有错误。你最好总是简单地预测'0'。 – cel

回答

25

人们必须了解像准确性/精度ROC AUC和“逐点”度量之间关键的区别等ROC是一个阈值的函数。给定一个输出属于每个类的概率的模型(分类器),我们通常将元素分类到支持度最高的类。然而,有时我们可以通过改变这个规则来获得更好的分数,并且要求一个支持比另一个支持大2倍以实际分类为给定类。 这通常适用于不平衡数据集。通过这种方式,您实际上可以修改课程中学到的知识,以更好地适应您的数据。 ROC着眼于“如果我将这个阈值改变为所有可能的值会发生什么事情”,然后AUC ROC计算这样一条曲线的积分。

结果:

  • 高AUC ROC VS低f1或其他“点”的度量,是指您的分类目前确实做得不好,但是你可以找到它的分数实际上是相当不错的门槛
  • 低AUC ROC和低f1或其他“点”的度量,是指您的分类目前确实做得不好,甚至装修阈值不会改变它
  • 高AUC ROC和高f1或其它“点“度量,意味着th在您的分类器目前做得不错,而对于其他许多阈值,它也会这么做
  • 低AUC ROC vs高f1或其他“点”度量,意味着您的分类器目前做的不错,但对于其他许多其他值的阈值 - 这是非常糟糕的
+0

什么被认为是高或低f-1分数?是50%正派还是不好? – KubiK888

+0

取决于手头的问题,但看起来不太好。 f1是精度和召回之间的调和平均值,因此它或多或少地转化为两者的比例(因为它总是在这两个值之间)。我会说0.6以下的分数很难接受。 – lejlot

+0

我已经做了一些欠采样,因为(1:1比率),精确度,召回率和f分数测量显着提高(例如f1从0.44到0.93),我不知道我应该依赖哪个结果更多?原始分布更类似于现实世界的分布,而欠采样是有意义的,但是它不会与原始分布变得如此遥远,它变得不具代表性? – KubiK888

相关问题