我试图计算roc_curve但是我收到了此错误消息
Traceback (most recent call last):
File "script.py", line 94, in <module>
fpr, tpr, _ = roc_curve(y_validate, status[:,1])
File "/usr/local/lib/python2.7/site-packages/sklearn/metrics/ranking.py", line 501, in roc_curve
y_true, y_score, pos_label=pos_label, sample_weight=sample_weight)
File "/usr/local/lib/python2.7/site-packages/sklearn/metrics/ranking.py", line 308, in _binary_clf_curve
raise ValueError("Data is not binary and pos_label is not specified")
ValueError: Data is not binary and pos_label is not specified
我的代码
status = rf.predict_proba(x_validate)
fpr, tpr, _ = roc_curve(y_validate, status[:,1]) //error generated here
roc_auc = auc(fpr, tpr)
print roc_auc
P.S:不太了解这个解决方案(ValueError: Data is not binary and pos_label is not specified),因为它似乎并不真正相关。
答案 0 :(得分:7)
要计算ROC曲线有效,您必须将您正在处理的标签指定为“true”或“positive”标签。 Scikit-learn假设给它的数据总是有标签0和1(在你的情况下在变量y_validate
中),其中一个被任意选择为正标签(我不知道如何 - 我“我相信你可以深入挖掘源代码并弄明白。”
如错误消息中所述 - 您的数据没有此预期的二进制格式。即使您的数据是二进制,但标签是'T'和'F',它也会抛出此错误。因此,根据roc_curve()
function from scikit-learn的文档,您需要准确指定要用作“正类”的字符串标签。因此,如果您的y_validate
变量中的标签为“T”和“F”,则可以执行:fpr, tpr, _ = roc_curve(y_validate, status[:,1], pos_label='T')
。