有没有人能推荐一个在<10-15ms范围内使用梯度提升模型进行预测的策略(越快越好)?
我一直在使用R的gbm包,但第一次预测需要大约50ms(随后的矢量化预测平均为1ms,因此似乎存在开销,可能是在调用C++库时)。作为指导,将有大约10-50个输入和~50-500个树。任务是分类,我需要访问预测概率。
我知道有很多库,但我很少幸运地找到信息,即使是在它们的粗略预测时间。训练将离线进行,因此只有预测需要快速--而且,预测可能来自一段代码/库,该代码/库与执行训练的内容完全分离(只要有一种通用的表示树的格式)。
发布于 2012-10-30 18:46:08
我是scikit-learn gradient boosting module的作者,这是一个用Python语言实现的梯度增强回归树。我花了一些精力来优化预测时间,因为该方法针对的是低延迟环境(特别是排名问题);预测例程是用C编写的,由于Python函数调用,仍然存在一些开销。话虽如此:具有大约50个特征和大约250棵树的单个数据点的预测时间应该是<< 1ms。
在我的用例中,预测时间通常由特征提取的成本决定。我强烈建议分析来指出开销的来源(如果您使用Python,我可以推荐line_profiler)。
如果开销的来源是预测而不是特征提取,你可能会检查是否有可能进行批量预测而不是预测单个数据点,从而限制由于Python函数调用而产生的开销(例如,在排名中,你通常需要对前K个文档进行评分,所以你可以先做特征提取,然后在K x n_features矩阵上运行预测。
如果这不起作用,你也应该尝试限制树的数量,因为预测的运行时成本基本上与树的数量成线性关系。有许多方法可以在不影响模型精度的情况下限制树的数量:
适当调整学习率;学习率越小,需要的树越多,因此使用带正则化的prediction.
如果上述方法都不起作用,那么您可以研究级联或提前退出策略(参见Chen2012)
参考文献:
作者声明: Warmuth2006 M. Warmuth,J. Liao和G.完全纠错的提升算法,最大化利润率。在2006年第23届机器学习国际会议论文集中。
Johnson2012 Rie Johnson,张通,使用正则化贪婪森林学习非线性函数,arxiv,2012。
Chen2012 Minmin Chen,徐志祥,Kilian Weinberger,Olivier Chapelle,Dor Kedem,用于最小化特征评估成本的分类器级联,JMLR W&CP 22: 218-226,2012。
https://stackoverflow.com/questions/11295755
复制相似问题