将 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
有没有人成功地使用 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