私はGoogleを検索し、このエラーについてのstackoverflowの投稿を参照してください。彼らは私の場合ではありません。sklearn auc ValueError:y_trueに1つのクラスしかありません
私はケラスを使って、単純なニューラルネットワークを訓練し、分割されたテストデータセットにいくつかの前提を作ります。しかし、roc_auc_score
を使用してaucを計算すると、 "ValueError:y_trueに1つのクラスしか存在しません.ROC AUCスコアはこの場合定義されていません。"
私はターゲットラベルの分布を検査しますが、それらは非常に不均衡です。一部のラベル(合計29個のラベル)にはインスタンスが1つしかありません。したがって、テストラベルにポジティブなラベルインスタンスがない可能性があります。だから、Sklearnのroc_auc_score
関数が唯一のクラス問題を報告しました。それは合理的です。
しかし、私はsklearnのcross_val_score
機能を使用する場合、それはエラーなしでAUCの計算を扱うことができるように私は、興味があります。 cross_val_score
が成層クロス検証データ分割を使用しているため、私はcross_val_score
に起こったのだろうか
my_metric = 'roc_auc'
scores = cross_validation.cross_val_score(myestimator, data,
labels, cv=5,scoring=my_metric)
は、それはありますか?
== UPDATE ==
私はいくつかの掘削を続け、それでもbehind.Iはスコアラーを返すために、そのcross_val_scoreコールcheck_scoring(estimator, scoring=None, allow_none=False)
を参照してください違いを見つけることができない、とcheck_scoring
はscorer=SCORERS[scoring]
get_scorer(scoring)
を呼び出します
そしてSCORERS['roc_auc']
roc_auc_scorer
です。
roc_auc_scorer
はそう
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
によって作られ、それでもroc_auc_score関数を使用しています。私はcross_val_scoreがroc_auc_scoreを直接呼び出して異なる振る舞いをする理由を知りません。
:
あなたのような何かをするだろうか? – maxymoo
@maxymoo文字列 'roc_auc'を使用します。これは有効な値です。 –
クロスバリデーションを行い、1種類のラベルが少なすぎる場合は、いくつかの折り目にそのようなラベルがない場合があります。折り畳みの数を減らし、層別サンプリングを使用するようにしてください。 – Kris