のメソッドを呼び出して精度と 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
F1 = 2 * (精度 * 再現率) / (精度 + 再現率)
先ほど言ったように、予測子が正のクラスをまったく予測しない場合、精度は 0 になります。
リコール = TP/(TP+FN)、予測子が正のクラスを予測しない場合、TP は 0、リコールは 0 になります。
つまり、0/0 を割っていることになります。