如何使用Scikit-Learn创建ROC曲线时使用预测分数

时间:2016-05-13 06:20:35

标签: python machine-learning scikit-learn roc

我有以下代码:

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我有错误类别的概率估计,我该如何处理该值?

2 个答案:

答案 0 :(得分:5)

对于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

答案 1 :(得分:0)

  

如果我所拥有的y_score 错误等级的概率估算,我该如何处理该值?

这是一个非常便宜的镜头,但您是否考虑过逆转原始班级列表,如

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

然后,您仍然可以应用规范化@Tchotchke proposed

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