scikitlearn が FN が 0 より大きい場合、F1 スコアが不明確であると表示するのはなぜですか? 質問する

scikitlearn が FN が 0 より大きい場合、F1 スコアが不明確であると表示するのはなぜですか? 質問する

のメソッドを呼び出して精度と F1 スコアを計算する Python プログラムを実行しますsklearn.metrics。予測サンプルがない場合の出力は次のとおりです。

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

予測サンプルがない場合、TP+FPは0になるので、

  • 精度(TP/(TP+FP)として定義)は0/0、定義されていない、
  • FN がゼロでない場合、F1 スコア (2TP/(2TP+FP+FN) として定義) は 0 になります。

私の場合、sklearn.metrics精度は 0.8 で、再現率は 0 です。したがって、FN はゼロではありません。

しかし、なぜ scikilearn は F1 が明確に定義されていないと言うのでしょうか?

Scikilearn で使用される F1 の定義は何ですか?

ベストアンサー1

scikit-learn のクラス化

F1 = 2 * (精度 * 再現率) / (精度 + 再現率)

先ほど言ったように、予測子が正のクラスをまったく予測しない場合、精度は 0 になります。

リコール = TP/(TP+FN)、予測子が正のクラスを予測しない場合、TP は 0、リコールは 0 になります。

つまり、0/0 を割っていることになります。

おすすめ記事