我注意到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曲线?有两个二进制输入,你不应该只有一个(误报,命中率)测量吗?
非常感谢!
答案 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()?我不确定它是否会有任何区别