ValueError: данные не являются двоичными, а pos_label не указан

Я пытаюсь вычислить 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)

Пожалуйста, скажите мне, что с ним не так.


person Community    schedule 23.08.2013    source источник


Ответы (2)


Вам нужно только изменить 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/master/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 и возникает исключение.

person jabaldonedo    schedule 24.08.2013
comment
Похоже, файл был удален давно и в текущей версии он больше не работает, я обновил ссылку на более старую версию. - person jabaldonedo; 03.03.2017

У нас есть проблема в y_true=np.array(['0', '1', '0', '0', '1', '1', '1', '1', '1']) преобразовании значений y_true в Boolean

y_true= '1' <= y_true
print(y_true) # [False  True False False  True  True  True  True  True]
person mAge    schedule 25.09.2019