我运行一个 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,所以
- 精度(定义为 TP/(TP+FP))为 0/0,未定义,
- 如果 FN 不为零,则 F1 分数(定义为 2TP/(2TP+FP+FN))为 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 * (precision * recall) / (precision + recall)
precision = TP/(TP+FP) 正如你刚才所说,如果预测器根本不预测正类 - 精度为 0。
recall = TP/(TP+FN),如果预测器不能预测正类 - TP 为 0 - 召回率为 0。
所以现在你正在划分 0/0。
关于python - 为什么 scikitlearn 说 F1 分数不明确,FN 大于 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757653/