我是scikit-learn 梯度提升模块的作者,它是 Python 中的梯度提升回归树实现。由于该方法针对低延迟环境(特别是排名问题),因此我在优化预测时间方面付出了一些努力;预测例程是用 C 编写的,由于 Python 函数调用,仍然存在一些开销。话虽如此:具有约 50 个特征和大约 250 棵树的单个数据点的预测时间应该 << 1 毫秒。
在我的用例中,预测时间通常取决于特征提取的成本。我强烈建议进行分析以查明开销的来源(如果您使用 Python,我可以推荐line_profiler)。
如果开销的来源是预测而不是特征提取,您可以检查是否可以进行批量预测而不是预测单个数据点,从而限制由于 Python 函数调用而产生的开销(例如,在排名中,您通常需要得分最高 - K 个文档,因此您可以先进行特征提取,然后在 K x n_features 矩阵上运行预测。
如果这没有帮助,您应该尝试限制树的数量,因为预测的运行时成本基本上与树的数量成线性关系。在不影响模型准确性的情况下,有多种方法可以限制树的数量:
适当调整学习率;学习率越小,需要的树越多,因此预测越慢。
具有 L1 正则化的后处理 GBM(Lasso);请参阅第 16.3.1 节统计学习的元素- 使用每棵树的预测作为新特征并通过 L1 正则化线性模型运行表示 - 删除那些没有得到任何权重的树。
完全校正权重更新;不要只为最近的树进行线搜索/权重更新,而是更新所有树(参见 [Warmuth2006] 和 [Johnson2012])。更好的收敛 - 更少的树。
如果以上方法都不能解决问题,您可以研究级联或提前退出策略(参见 [Chen2012])
参考:
[Warmuth2006] M. Warmuth、J. Liao 和 G. Ratsch。完全修正的提升算法,最大限度地提高利润。在第 23 届机器学习国际会议论文集上,2006 年。
[Johnson2012] Rie Johnson,Tong Zhang,使用正则化贪心森林学习非线性函数,arxiv,2012。
[Chen2012] Minmin Chen, Zhixiang Xu, Kilian Weinberger, Olivier Chapelle, Dor Kedem, Classifier Cascade for Minimizing Feature Evaluation Cost, JMLR W&CP 22: 218-226, 2012.