web-dev-qa-db-ja.com

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)

何が悪いのか教えてください。

20
user2374515

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.pyy_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であり、例外が発生します。

15
jabaldonedo

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]
0
mAge