在很多地方都说过,对于大小为10000的输入数据,批量预测整个数据要比逐行预测每一行更快(在两种情况下均为model.n_jobs = 1)。
我知道一对一的解决方案会有很多开销。但是,在在线服务中,请求是一个接一个地发送的,很难先将它们汇总再进行批量预测。
另一种解决方案是仅将scikit-learn用于训练/验证,然后开发一个项目来加载模型文件并优化一对一预测。
问题在于预测项目需要了解每种模型的细节(我们可能使用随机森林,LR等)。
所以我的问题是,有什么解决方案可以减少sklearn的一对一预测开销吗?
scikit-learn版本:0.20.0(您可以提出任何其他版本可以解决此问题)
答案 0 :(得分:0)
是的,sklearn已针对矢量运算进行了优化。我不知道为在线设置专门优化的代码。对于单个请求分析sklearn的性能将是很好的。为了加快速度,已经在Cython中重写了诸如Random Forests之类的一些方法。但是,由于Python速度较慢,您可能需要用C重写具有较大开销的部分的代码。对于GBDT这样的方法,请考虑使用优化的程序包(例如xgboost)。另外,请查看以下讨论加速随机森林的幻灯片:https://www.slideshare.net/glouppe/accelerating-random-forests-in-scikitlearn