1. ホーム
  2. python

[解決済み] ValueError: データがバイナリでなく、pos_label が指定されていない。

2022-02-05 14:19:04

質問

を計算しようとしています。 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_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_labelNone を定義している限りは y_true は文字の配列として np.all は常に false となり、すべて否定されるため、if条件は true という例外が発生します。