我正在尝试计算roc_auc_score
,但我收到了以下错误。
"ValueError: Data is not binary and pos_label is not specified"
我的代码段如下:
import numpy as np
from sklearn.metrics import roc_auc_score
y_scores=np.array([ 0.63, 0.53, 0.36, 0.02, 0.70 ,1 , 0.48, 0.46, 0.57])
y_true=np.array(['0', '1', '0', '0', '1', '1', '1', '1', '1'])
roc_auc_score(y_true, y_scores)
请告诉我它有什么问题。
答案 0 :(得分:14)
您只需要更改y_true
,如下所示:
y_true=np.array([0, 1, 0, 0, 1, 1, 1, 1, 1])
<强>说明:强>
如果您查看roc_auc_score
函数在https://github.com/scikit-learn/scikit-learn/blob/0.15.X/sklearn/metrics/metrics.py中执行的操作,您会看到y_true
的评估方式如下:
classes = np.unique(y_true)
if (pos_label is None and not (np.all(classes == [0, 1]) or
np.all(classes == [-1, 1]) or
np.all(classes == [0]) or
np.all(classes == [-1]) or
np.all(classes == [1]))):
raise ValueError("Data is not binary and pos_label is not specified")
执行时pos_label
为None
,但只要您将y_true
定义为字符数组,np.all
始终为false
因为所有这些都被否定了,所以if条件是true
并且引发了异常。
答案 1 :(得分:0)
我们有问题
y_true=np.array(['0', '1', '0', '0', '1', '1', '1', '1', '1'])
将y_true的值转换为布尔值
y_true= '1' <= y_true
print(y_true) # [False True False False True True True True True]