我有以下代码:
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
是错误类的概率估计,我该如何处理该值?
对于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
如果我的
y_score
是错误类的概率估计,我该如何处理该值?
这是一个非常便宜的镜头,但你有没有考虑过像在中那样颠倒原始的类别列表
actual = [abs(x-1) for x in actual]
然后,您仍然可以应用@Tchotchke提出的规范化。
不过,最终,@BrenBarn似乎是对的。如果可能的话,深入了解这些值是如何在其他预测工具中创建和/或使用的。