R中是否有并行实现GBM?

时间:2015-11-20 16:47:15

标签: r machine-learning parallel-processing gbm

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

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

2 个答案:

答案 0 :(得分:2)

嗯,不能原则上> GBM 的并行实现,既不在R中也不在任何其他实现中。原因很简单:增强算法按照定义顺序

请考虑以下内容,引自 The Elements of Statistical Learning ,Ch。 10(Boosting and Additive Trees),pp.337-339(强调我的):

  

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

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

enter image description here

事实上,这经常被认为是GBM的一个关键缺点,比如随机森林(RF),其中树是独立的,因此可以平行拟合(参见bigrf R包)

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

答案 1 :(得分:2)

据我所知,h2oxgboost都有这个。

对于h2o,请参阅例如我引用的this blog post of theirs from 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倍以上。它支持各种目标函数,包括回归,分类和排名。该软件包是可扩展的,因此用户也可以轻松定义自己的目标。