【问题标题】:How to use prediction score in creating ROC curve with Scikit-Learn如何在 Scikit-Learn 中使用预测分数创建 ROC 曲线
【发布时间】:2016-09-09 05:03:23
【问题描述】:

我有以下代码:

from sklearn.metrics import roc_curve, auc

actual      = [1,1,1,0,0,1]
prediction_scores = [0.9,0.9,0.9,0.1,0.1,0.1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(actual, prediction_scores, pos_label=1)
roc_auc = auc(false_positive_rate, true_positive_rate)
roc_auc
# 0.875

在这个例子中,prediction_scores 的解释很简单,即,越高分数越高,预测的可信度就越高。

现在我有了另一组预测预测分数。 它是非分数的,解释是相反的。意思是较低的 分数对预测更有信心。

prediction_scores_v2 = [10.3,10.3,10.2,10.5,2000.34,2000.34]
# so this is equivalent 

我的问题是:我怎样才能在prediction_scores_v2 中缩放它以便它给出 与第一个相似的 AUC 分数?

换句话说,Scikit's ROC_CURVE 要求y_score正类的概率估计。如果我拥有的y_score错误类别的概率估计,我该如何处理该值?

【问题讨论】:

  • 我不确定你在问什么。您的新预测分数代表什么?
  • @BrenBarn:您可以将其视为信心的“倒数”。
  • 在什么意义上?您根据特定信息生成 AUC,即各种区分阈值的误报率和真阳性率。您不能只取一些任意数字并从中计算 AUC。您需要从统计/数学角度解释这些数字代表什么。
  • @BrenBarn:我想使用 Scikit-Learn ROC 来衡量预测工具的性能。他们有自己的公式来计算该分数。但是这个工具给出了我在 V2 中所说的值。该值的解释正如我所说,越低越好。
  • “越低越好”不够具体。您需要知道如何解释实际数字。 5和10有什么区别? 5到6之间呢?是什么让您认为可以使用这些值来计算 AUC?

标签: python machine-learning scikit-learn roc


【解决方案1】:

如果我拥有的y_score错误类的概率估计,我该如何处理该值?

这是一个非常便宜的镜头,但是您是否考虑过将原始课程列表颠倒过来,如

actual      = [abs(x-1) for x in actual]

然后,您仍然可以应用标准化@Tchotchke proposed

不过,最后,@BrenBarn 似乎是正确的。如果可能,深入了解这些值是如何在其他预测工具中创建和/或使用的。

【讨论】:

    【解决方案2】:

    对于 AUC,您实际上只关心预测的顺序。因此,只要这是真的,您就可以将您的预测转换为 AUC 可以接受的格式。

    您需要除以最大值以使您的预测介于 0 和 1 之间,然后从 1 中减去,因为在您的情况下越低越好:

    max_pred = max(prediction_scores_v2)
    prediction_scores_v2[:] = (1-x/max_pred for x in prediction_scores_v2)
    
    false_positive_rate, true_positive_rate, thresholds = roc_curve(actual, prediction_scores_v2, pos_label=1)
    roc_auc = auc(false_positive_rate, true_positive_rate)
    # 0.8125
    

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 2016-08-24
      • 2018-07-30
      • 2019-04-19
      • 2018-05-14
      • 2015-06-23
      • 2013-10-08
      • 2016-06-11
      相关资源
      最近更新 更多