pythonプログラムを実行して、sklearn.metrics
のメソッドを呼び出して、精度とF1スコアを計算します。予測サンプルがない場合の出力は次のとおりです。
/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であることを意味するため、
私の場合、sklearn.metrics
は精度を0.8として返し、0として呼び出します。したがって、FNはゼロではありません。
しかし、scikilearnがF1が不明確だと言うのはなぜですか?
Scikilearnで使用されるF1の定義は何ですか?
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/classification.py
F1 = 2 *(精度*再呼び出し)/(精度+再呼び出し)
予測子が正のクラスをまったく予測しない場合、先ほど述べたように、精度= TP /(TP + FP)-精度は0です。
リコール= TP /(TP + FN)、予測子が陽性クラスを予測しない場合-TPは0-リコールは0.
これで、0/0を分割しています。
精度、リコール、F1-スコアおよび精度計算
- In a given image of Dogs and Cats
* Total Dogs - 12 D = 12
* Total Cats - 8 C = 8
- Computer program predicts
* Dogs - 8
5 are actually Dogs T.P = 5
3 are not F.P = 3
* Cats - 12
6 are actually Cats T.N = 6
6 are not F.N = 6
- Calculation
* Precision = T.P / (T.P + F.P) => 5 / (5 + 3)
* Recall = T.P / D => 5 / 12
* F1 = 2 * (Precision * Recall) / (Precision + Recall)
* F1 = 0.5
* Accuracy = T.P + T.N / P + N
* Accuracy = 0.55
ウィキペディア 参照