Performance 如何加速GLM估计?

Performance 如何加速GLM估计?,performance,r,bigdata,Performance,R,Bigdata,我在AmazonEC2上使用RStudio0.97.320(R2.15.3)。我的数据框有20万行和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))), fa

我在AmazonEC2上使用RStudio0.97.320(R2.15.3)。我的数据框有20万行和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,])

glm.1.2您可以从
speedglm
软件包中尝试
speedglm
功能。我没有在你描述的大问题上使用它,但特别是如果你安装了BLAS库(正如@Ben Bolker在评论中建议的),它应该很容易使用,并给你一个很好的减速


我记得看到过一个对标
glm
speedglm
的表格,有性能优化的BLAS库和没有性能优化的BLAS库,但我今天似乎找不到它。我记得它说服了我,我想要两者。

虽然有点晚了,但我只能鼓励dickoa的建议,使用矩阵包生成稀疏模型矩阵,然后将其提供给speedglm.wfit函数。那太好了;-)通过这种方式,我能够在不到3分钟的时间内对1e6 x 3500模型矩阵进行逻辑回归 PARGLM 。有关计算时间的比较和更多详细信息,请参见。我在这里展示了计算时间的比较

parglm
函数中的一个方法用作
mgcv
中的
bam
函数。详细描述了该方法

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


该方法的一个优点是可以用非并发QR实现来实现它,并且仍然可以并行地进行计算。另一个优势是潜在的较低内存占用。这在
mgcv
bam
函数中使用,也可以通过
speedglm
shglm
函数中的设置在这里实现。

我没有关于速度的即时建议,但据推断,您不应该使用
var+I(var^2)
。相反,您应该使用
poly(var,2)
。你构建了一个极其复杂的公式,但你是否需要这样一个怪物还不清楚。您应该描述研究问题并获得关于分析设计的进一步建议,您可能应该在CrossValidated上再次这样做。我怀疑拟合1500个参数是否会产生有用的结果。有趣的技术问题,尽管我同意其他评论者的担忧。(1) 在
RcppArmadillo
包中有一个
fastLm
函数,说明了如何加速线性回归,但重新实现GLM需要更多的工作。(2) 安装优化的BLAS库可能会带来更低的收益:。(3) 虽然在这种情况下,N/P仅为133,但线性回归可能可行。(4) 尝试通过
glmnet
包惩罚GLM…(5)由于您的一些预测值是因子,您可以通过使用稀疏模型矩阵购买一些速度(请参阅
矩阵
包中的
?GLM.fit
?稀疏模型.matrix
)特别是如果你的因素有多层次的话,你应该认真考虑使用<代码> GLMNET < /代码>它非常快(它使用梯度下降)和1500个参数来适应我不认为正则化(通过弹性网)会伤害…我可以逐步使用speedglm吗?你可以添加一点关于
parglm
的内容(即它如何实现计算效率)?我已经做了
mgcv
中的
bam
函数,首先估计不同数据块上的一系列QR分解。最后将结果合并。更多详细信息请参见“Wood,S.N.,Goude,Y.和Shaw S.(2015)大型数据集的广义加性模型。皇家统计学会杂志,系列C 64(1):139-155”。这很好。你能把这个解释编辑成你的问题吗(评论是短暂的)?