2013-08-23 1 views
14

Я пытаюсь вычислить roc_auc_score, но я получаю следующую ошибку.ValueError: данные не являются бинарными и pos_label не указан

"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) 

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

ответ

11

Вам нужно только изменить 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, но, как долго s ваш определяют y_true как массив символов np.all всегда false, и поскольку все они отрицаются, то условие if равно true и исключение возбуждается.

+0

Получил это, я этого не заметил. Спасибо за указание. –

+1

Ссылка Github больше не работает. – Melike

+1

Похоже, что файл был удален давно, и он больше не работает в текущей версии, я обновил ссылку на более раннюю версию – jabaldonedo