sklearn如何计算两个二进制输入的roc曲线下的面积?

时间:2014-09-17 03:05:05

标签: python scikit-learn

我注意到sklearn具有以下功能:

sklearn.metrics.roc_auc_score()

作为输入ground_truth和预测。

例如,

ground_truth = [1,1,0,0,0]
prediction = [1,1,0,0,0]

sklearn.metrics.roc_auc_score(ground_truth, prediction)返回1

我的问题是我无法弄清楚sklearn如何使用两个二进制输入计算ROC曲线下的面积。是否通过移动类别分配阈值并计算每个阈值的误报和命中率来得出ROC曲线?有两个二进制输入,你不应该只有一个(误报,命中率)测量吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

你是正确的,通过二元预测你只能有一个曲线的阈值/测量值。我自己并不理解,所以我使用大量的打印语句运行代码,用于sklearn教程,然后使用纯二进制示例。所有的魔力都发生在sklearn.metrics._binary_clf_curve

“阈值”是不同的预测分数。对于任何输出纯粹1和0的二进制分类器,您将获得两个阈值 - 1和0(它们在内部从最高到最低排序)。在1阈值处,≥1的预测分数为真,并且低于该预测分数(在这种情况下仅为0)被认为是假的,并且由此计算TP和FP速率。在所有情况下,最后一个阈值将所有内容归类为真,因此TP和FP速率都为1。

然后看来,要为sklearn分类器生成正确的ROC曲线,您将使用clf.predict_proba()而不是predict()。或者,也许predict_log_proba()?我不确定它是否会有任何区别