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

4

I have the following code:

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的ROC_CURVE要求y_score正类的概率估计值。如果我的y_score错误类别的概率估计值,我该如何处理这个值?

我不确定你在问什么。你的新预测分数代表什么? - BrenBarn
@BrenBarn:你可以把它看作是“置信度”的‘反义词’。 - neversaint
1
从什么意义上来说?您可以从特定信息中生成AUC,即各种鉴别阈值的假阳性率和真阳性率。您不能仅凭一些任意数字计算AUC。您需要解释这些数字代表什么,从统计/数学角度来说。 - BrenBarn
@BrenBarn:我想使用Scikit-Learn ROC来衡量预测工具的性能。他们有自己的公式来计算得分。但是这个工具给出的值如我在V2中所述。该值的解释如我所说,越低越好。 - neversaint
“越低越好”这种说法并不够具体。你需要知道如何解释实际的数字。5和10之间有什么区别?5和6呢?你怎么能确定可以使用这些值来计算AUC呢? - BrenBarn
2个回答

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

0
如果我手头的 y_score 是“错误类别的概率估计”,那么我该如何处理这个值?
这可能是一个非常简单的解决方案,但您是否考虑过将原始类别列表反转,例如:
actual      = [abs(x-1) for x in actual]

那么,您仍然可以应用标准化@Tchotchke提出的建议。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接