3

我使用gbmR 中的库,我想使用我所有的 CPU 来拟合模型。

gbm.fit(x, y,
        offset = NULL,
        misc = NULL,...
4

2 回答 2

4

好吧,原则上不可能有 GBM并行实现,无论是在 R 中,还是在任何其他实现中。原因很简单:boosting 算法根据定义是顺序的。

考虑以下内容,引自The Elements of Statistical Learning,Ch。10(Boosting and Additive Trees),第 337-339 页(重点是我的):

弱分类器的错误率仅略好于随机猜测。boosting 的目的是将弱分类算法依次应用于重复修改的数据版本,从而产生一系列弱分类器 Gm(x), m = 1, 2, . . . , M. 然后通过加权多数投票将来自所有这些的预测组合起来以产生最终预测。[...] 因此,每个连续的分类器都被迫专注于那些被序列中先前的分类器遗漏的训练观察。

在图片中(同上,第 338 页):

在此处输入图像描述

事实上,这经常被认为是 GBM 相对于随机森林 (RF) 的一个主要缺点,其中的树是独立的,因此可以并行安装(参见bigrf R 包)。

因此,正如上面的评论者所指出的那样,您能做的最好的事情就是使用多余的 CPU 内核来并行化交叉验证过程......

于 2015-11-29T16:47:41.600 回答
2

据我所知,h2oxgboost都有这个。

对于h2o,请参阅他们 2013 年的这篇博客文章,我从中引用

在 0xdata,我们构建了最先进的分布式算法——最近我们开始构建 GBM,而算法因无法并行化而臭名昭著的分布式算法。我们构建了第 387 页的《统计学习要素 II》、Trevor Hastie、Robert Tibshirani 和 Jerome Friedman 中所示的算法(显示在本文底部)。大多数算法都是简单的“小”数学,但步骤 2.b.ii 说“将回归树拟合到目标......”,即在内循环中间拟合回归树,目标随每个目标而变化外循环。这是我们决定分发/并行化的地方。

我们构建的平台是 H2O,正如在之前的博客中所讨论的,有一个 API 专注于进行大型并行向量操作 - 而对于 GBM(以及随机森林),我们需要进行大型并行树操作。但实际上并不是任何树操作;GBM(和 RF)不断构建树 - 工作总是在树的叶子上,并且是为落入特定叶子的训练数据子集找到下一个最佳分割点。

代码可以在我们的 git 上找到:http: //0xdata.github.io/h2o/

(编辑:回购现在位于https://github.com/h2oai/。)

我认为,另一个并行 GBM 实现是在xgboost中。它的描述说

Extreme Gradient Boosting,这是梯度提升框架的有效实现。这个包是它的 R 接口。该软件包包括高效的线性模型求解器和树学习算法。该包可以在单台机器上自动进行并行计算,比现有的梯度提升包快 10 倍以上。它支持各种目标函数,包括回归、分类和排名。该软件包是可扩展的,因此用户也可以轻松定义自己的目标。

于 2015-11-29T17:33:14.913 回答