python - 为什么 scikitlearn 说 F1 分数不明确,FN 大于 0?

标签 python machine-learning statistics scikit-learn

我运行一个 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/

相关文章:

machine-learning - 如何处理 YUV422 (YUYV) 图像作为 CNN 的输入?

c++ - Armadillo cov函数输入

language-agnostic - 无需迭代即可为一组数字数据维护哪些统计信息?

Python:为什么列表没有查找方法?

python - 为方法创建一个动态参数列表

machine-learning - 是否可以在训练前和训练期间修改 OpenAI 健身房状态?

python - 使用 Pybrain 进行序列模式识别

python - Flask:强制下载pdf文件在浏览器中打开

python - 使用 python pandas 读取 sharepoint excel 文件

sql-server - 为 Microsoft SQL Server 创建统计信息时,列顺序是否重要?