21

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

请告诉我它有什么问题。

4

2 回答 2

19

你只需要改变y_true它看起来像这样:

y_true=np.array([0, 1, 0, 0, 1, 1, 1, 1, 1])

说明: 如果您查看https://github.com/scikit-learn/scikit-learn/blob/0.15.X/sklearn/metrics/metrics.pyroc_auc_score中的功能,您将看到评估如下: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_labelNone,但只要你定义y_true为一个字符数组,np.all总是false并且因为它们都被否定,那么 if 条件是true并且引发异常。

于 2013-08-24T10:32:20.353 回答
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]
于 2019-09-25T19:24:44.787 回答