web-dev-qa-db-ja.com

マルチクラス分類のsklearnメトリック

Sklearnを使用してGaussianNB分類を実行しました。次のコードを使用してメトリックを計算しようとしました:

print accuracy_score(y_test, y_pred)
print precision_score(y_test, y_pred)

精度スコアは正しく機能していますが、精度スコアの計算では次のエラーが表示されます。

ValueError:ターゲットはマルチクラスですが、average = 'binary'です。別の平均設定を選択してください。

ターゲットはマルチクラスなので、精度、リコールなどのメトリックスコアを取得できますか?

22
dino

関数呼び出しprecision_score(y_test, y_pred)precision_score(y_test, y_pred, pos_label=1, average='binary')と同等です。ドキュメント( http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html )は次のように伝えています:

'バイナリ':

Pos_labelで指定されたクラスの結果のみを報告します。これは、ターゲット(y_ {true、pred})がバイナリの場合にのみ適用されます。

そのため、問題はラベルがバイナリではなく、おそらくワンホットでエンコードされていることです。幸いなことに、データを処理する他のオプションがあります。

precision_score(y_test, y_pred, average=None)は各クラスの精度スコアを返しますが、

precision_score(y_test, y_pred, average='micro')は、tp /(tp + fp)の合計比率を返します

average以外のbinaryオプションを選択した場合、pos_label引数は無視されます。

41
ml4294