python – 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)

请告诉我它有什么问题.

解决方法:

你只需要更改y_trueso它看起来像这样:

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并引发异常.

上一篇:泰坦尼克号生存预测分析


下一篇:Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算