如何加快GLM估算?

时间:2013-04-29 17:31:39

标签: 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,])

有任何建议可以大幅提速吗?

3 个答案:

答案 0 :(得分:7)

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

我记得在使用和不使用BLAS库的情况下看到基准glmspeedglm的表格,但我今天似乎无法找到它。我记得我确信我想要BLAS和speedglm

答案 1 :(得分:4)

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

答案 2 :(得分:2)

假设您的设计矩阵不稀疏,则还可以考虑使用我的软件包parglm。有关计算时间的比较和更多详细信息,请参见this vignette。我在这里显示了计算时间on a related question的比较。

parglm函数中的一种方法与bam中的mgcv函数相同。

中详细描述了该方法
  

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

该方法的优势在于,可以使用非并行QR实现来实现它,并且仍然可以并行进行计算。另一个优点是可能会减少内存占用量。此功能用在mgcv的{​​{1}}函数中,也可以在此处通过bam的{​​{1}}函数中的设置来实现。