我有以下代码:
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
我有错误类别的概率估计,我该如何处理该值?
答案 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似乎是正确的。如果可能,请深入了解如何在其他预测工具中创建和/或使用这些值。