如何加快GLM估算?

Wil*_*amp 10 performance r bigdata

我在Amazon EC2上使用RStudio 0.97.320(R 2.15.3).我的数据框有200k行和12列.

我试图用大约1500个参数拟合逻辑回归.

R使用7%的CPU并且具有60 + GB内存并且仍然需要很长时间.

这是代码:

glm.1.2 <- glm(formula = Y ~ factor(X1) * log(X2) * (X3 + X4 * (X5 + I(X5^2)) * (X8 + I(X8^2)) + ((X6 + I(X6^2)) * factor(X7))), 
  family = binomial(logit), data = df[1:150000,])
Run Code Online (Sandbox Code Playgroud)

有什么建议可以加快这一速度吗?

Gre*_*gor 8

你可以尝试speedglmspeedglm包中的功能.我没有在你描述的问题上使用它,但特别是如果你安装一个BLAS库(如评论中提到的@Ben Bolker)它应该很容易使用并给你一个很好的减速带.

我记得看到一个表格基准测试glm,speedglm有没有BLAS库,但我今天似乎无法找到它.我记得我确信我想要BLAS和speedglm.


小智 6

虽然有点晚,但我只能鼓励 dickoa 的建议,即使用 Matrix 包生成稀疏模型矩阵,然后将其提供给 speedglm.wfit 函数。效果很好 ;-) 这样,我能够在不到 3 分钟的时间内在 1e6 x 3500 模型矩阵上运行逻辑回归。


Ben*_*sen 5

假设你的设计矩阵不是稀疏的,那么你也可以考虑我的 package parglm。有关计算时间的比较和更多详细信息,请参阅此小插图。我在这里展示了一个相关问题的计算时间的比较。

parglm函数中的方法之一作为 中的bam函数工作mgcv。该方法在

Wood, SN, Goude, Y. & Shaw S. (2015) 大型数据集的广义加法模型。皇家统计学会杂志,C 系列 64(1):139-155。

该方法的优点是可以使用非并发 QR 实现来实现它,并且仍然可以并行执行计算。另一个优点是潜在的较低内存占用。这是在使用mgcvbam功能,也可以用一个设置在这里实现为speedglmshglm功能。

  • 我已经像“mgcv”中的“bam”函数一样,首先估计不同数据块上的一系列 QR 分解。最后将结果合并。更多详细信息可参见“*Wood, SN, Goude, Y. &amp; Shaw S. (2015) Generalized Additive models for Large datasets. Journal of the Royal Statistical Society, Series C 64(1): 139-155*”。 (2认同)
  • 那太棒了。您能否将此解释编辑到您的问题中(评论是短暂的)? (2认同)