sklearn.metrics.accuracy_score 非常慢

问题描述 投票:0回答:1

我需要测量模型对二元分类(0 和 1 输出)的预测的准确性。我正在使用许多不同的阈值测试我的模型,并且我的测试数据集非常大(50-1 亿个示例),因此我需要一种快速方法来计算模型的准确性。 我正在优化我的代码,注意到计算精度的标准函数比直接计算慢约 50 倍。 最小的例子:

from sklearn.metrics import accuracy_score
import numpy as np
import timeit
a=np.random.randint(0,2,1000000)
b=np.random.randint(0,2,1000000)
%timeit accuracy_score(a,b)
# 46.7 ms ± 390 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit (a==b).sum()/a.size
# 713 µs ± 7.22 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

我错过了什么吗?看起来accuracy_score是衡量准确性的标准方法。为什么这么慢?底层没有 C 优化吗?

python performance scikit-learn
1个回答
0
投票

您可以从

accuracy_score
源代码中看到它比您的比较代码片段执行了更多的工作。它也不是直接用 C 语言编写的,只是通过 NumPy 间接利用基于 C 的优化。

您未考虑的操作包括:

  • 输入类型验证
  • 数组长度验证
  • 支持多种数组格式(NumPy、Python 列表等)

(a==b).sum()/a.size

您的比较代码(上面)应该总是更快,因为它不太安全且不太灵活。这就是我们有时会做出的权衡。

© www.soinside.com 2019 - 2024. All rights reserved.