【问题标题】:Gradient boosting predictions in low-latency production environments?低延迟生产环境中的梯度提升预测?
【发布时间】:2012-07-02 23:45:58
【问题描述】:

谁能推荐一种使用

我一直在使用Rgbm 包,但第一次预测需要大约 50 毫秒(随后的矢量化预测平均为 1 毫秒,因此似乎存在开销,可能在对 C++ 库的调用中)。作为指导,将有大约 10-50 个输入和大约 50-500 个树。任务是分类,我需要访问预测的概率。

我知道那里有很多图书馆,但我很难找到关于它们粗略预测时间的信息。训练将离线进行,因此只需要快速预测——而且,预测可能来自与训练完全分开的一段代码/库(只要有表示树的通用格式) .

【问题讨论】:

    标签: machine-learning classification


    【解决方案1】:

    我是scikit-learngradient boosting module 的作者,这是一个 Python 中的梯度增强回归树实现。由于该方法针对低延迟环境(特别是排名问题),因此我在优化预测时间方面付出了一些努力;预测例程是用 C 编写的,由于 Python 函数调用,仍然存在一些开销。话虽如此:具有约 50 个特征和大约 250 棵树的单个数据点的预测时间应该是

    在我的用例中,预测时间通常取决于特征提取的成本。我强烈建议进行分析以查明开销的来源(如果您使用 Python,我可以推荐 line_profiler)。

    如果开销的来源是预测而不是特征提取,您可以检查是否可以进行批量预测而不是预测单个数据点,从而限制 Python 函数调用造成的开销(例如,在排名中,您经常需要评分前 K 个文档,因此您可以先进行特征提取,然后在 K x n_features 矩阵上运行预测。

    如果这没有帮助,您应该尝试限制树的数量,因为预测的运行时成本基本上与树的数量成线性关系。 在不影响模型精度的情况下,有多种方法可以限制树的数量:

    1. 正确调整学习率;学习率越小,需要的树越多,预测就越慢。

    2. 使用 L1 正则化 (Lasso) 的后处理 GBM;请参阅Elements of Statistical Learning 第 16.3.1 节 - 将每棵树的预测用作新特征并通过 L1 正则化线性模型运行表示 - 删除那些没有获得任何权重的树。

    3. 完全纠正权重更新;而不是只为最近的树进行线搜索/权重更新,而是更新所有树(参见 [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.

    【讨论】:

    • 我曾尝试在 7 月份查找有关 scikit-learn 预测时间的信息,但找不到,因此我选择使用浅层学习算法(我知道可以满足延迟要求)。我的用例是在线广告中的出价排名,因此批量预测会有所帮助,但每次展示的决策仍然必须在 10 毫秒内完成。回复:您关于减少树数的建议,我尝试了 1,只是阅读了 2,然后将研究 3——感谢您的参考/想法。对于一个新项目,我正在考虑使用 Weka 和 scikit-learn,所以您的回复很有帮助。
    • 在当前 sklearn 的 HEAD 中有一个预测延迟与准确性的基准,以及(我相信)关于该主题的完整文档,包括许多分类器/回归器的预测时间。例如,请参阅此脚本:github.com/oddskool/scikit-learn/blob/pred_latency/examples/…
    猜你喜欢
    • 2013-05-10
    • 2010-11-17
    • 2018-09-21
    • 2011-12-25
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多