使用Numba与scikit-learn

12

有人成功地使用Numba和JIT编译加速Scikit-learn模型吗?我想看一下的具体模型是回归模型,例如逻辑回归。

我能够使用Numba来优化我写的函数,其中包含使用Sklearn模型,但模型函数本身不受影响,也没有经过优化,因此并未提供明显的加速效果。 有没有办法优化Sklearn函数?

非常感谢任何关于这方面的信息。

2个回答

9
Scikit-learn大量使用numpy,其中大部分是用C编写的并已经编译(因此不适合JIT优化)。
此外,LogisticRegression模型本质上是带有适当损失函数的LinearSVC。我可能有点错,但无论如何,它使用LIBLINEAR来进行求解,这又是一个已编译的C库。
Scikit-learn的制造商还大量使用Python到编译系统之一Pyrex,这再次导致优化的机器编译代码不适合JIT编译。

谢谢您的回答。那么可以使用什么替代品呢?TensorFlow? - Xiaoxiong Lin
一般来说,scikit-learn模型在多核系统上表现非常出色。如果您需要使用GPU来满足性能需求,那么是的,您必须切换到像TensorFlow这样的框架,并利用GPU优化算法。 - Andreus
2
答案意味着numba不会优化numpy-heavy代码,这是不正确的。 - Keto
我同意@Keto的观点。文档中说:“numba[...]最适合使用NumPy数组和函数以及循环的代码。” - Ali Pardhan

1
@numba.vectorize用于数组,@numba.guvectorise用于矩阵,这些装饰器可以帮助组合循环操作。它们生成所谓的“ufunc”,以实现此目标,但无需手动编写c代码,而是从python输入中生成。请参见:http://numba.pydata.org/numba-doc/dev/user/vectorize.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接