将 Numba 与 scikit-learn 结合使用

Using Numba with scikit-learn

有没有人成功地使用 numba 和 jit 编译来加速 scikit-learn 模型。我看的具体模型是回归模型,比如Logistic Regressions。

我可以使用 numba 来优化我使用 sklearn 模型编写的函数,但是模型函数本身不受此影响,也没有进行优化,因此不会显着提高速度。有没有办法优化 sklearn 函数?

如有任何相关信息,我们将不胜感激。

Scikit-learn 大量使用 numpy,其中大部分是用 C 编写的并且已经编译(因此不符合 JIT 优化条件)。

此外,LogisticRegression 模型本质上是具有适当损失函数的 LinearSVC。我对此可能有点错误,但无论如何,它使用 LIBLINEAR 进行求解,这又是一个编译的 C 库。

scikit-learn 的开发者还大量使用了一种 python 编译系统,我认为是 Pyrex,这再次导致优化的机器编译代码不符合 JIT 编译的条件。

用于数组的 @numba.vectorize 和用于矩阵的 @numba.guvectorise 装饰器可能会有所帮助,因为它们可以组合循环操作。他们生成实现此目标的所谓 "ufunc"s,但不必自己手动编写 c 代码,而是从 python 输入生成它。

参见:http://numba.pydata.org/numba-doc/dev/user/vectorize.html