值错误:数据不是二进制的,并且未为roc_curve指定pos_label



我正在尝试计算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

PS:不太了解这个解决方案(ValueError:数据不是二进制的,也没有指定pos_label),因为它似乎并不真正相关。

要使

ROC 曲线的计算有效,必须指定视为"真"或"正"标签的标签。Scikit-learn假设提供给它的数据将始终具有标签0和1(在您的情况下在变量y_validate中),其中一个被任意选择为正标签(我不完全知道如何 - 我相信你可以挖掘源代码并弄清楚)。

如错误消息中所述 - 您的数据没有这种预期的二进制格式。即使您的数据是二进制的,但标签是"T"和"F",也会引发此错误。因此,根据scikit-learn的roc_curve()函数文档,您需要准确指定使用哪个字符串标签作为"正类"。因此,如果您的标签在y_validate变量中是"T"和"F",您将执行以下操作:fpr, tpr, _ = roc_curve(y_validate, status[:,1], pos_label='T') .

相关内容

  • 没有找到相关文章