我在R中使用gbm
库,我想用我所有的CPU来拟合模型。
gbm.fit(x, y,
offset = NULL,
misc = NULL,...
答案 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页):
事实上,这经常被认为是GBM的一个关键缺点,比如随机森林(RF),其中树是独立的,因此可以平行拟合(参见bigrf R包)
因此,您可以做的最好的事情,就像上面的评论者所指出的那样,是使用多余的CPU内核来并行化交叉验证过程......
答案 1 :(得分:2)
对于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倍以上。它支持各种目标函数,包括回归,分类和排名。该软件包是可扩展的,因此用户也可以轻松定义自己的目标。