首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“速度”比“速度”慢?

为什么“速度”比“速度”慢?
EN

Stack Overflow用户
提问于 2017-05-26 18:21:35
回答 1查看 2.7K关注 0票数 6

我试图使用speedglm来实现比glm更快的GLM估计,但是为什么它更慢呢?

代码语言:javascript
复制
set.seed(0)
n=1e3
p=1e3
x=matrix(runif(n*p),nrow=n)
y=sample(0:1,n,replace = T)

ptm <- proc.time()
fit=glm(y~x,family=binomial())
print(proc.time() - ptm)
#   user  system elapsed 
#  10.71    0.07   10.78 

library(speedglm)
ptm <- proc.time()
fit=speedglm(y~x,family=binomial())
print(proc.time() - ptm)
#   user  system elapsed 
#  15.11    0.12   15.25 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-26 18:34:00

speedglmglm上的效率,是它将n * p模型矩阵简化为p * p矩阵的方法。但是,如果您有n = p,则没有有效的减少。您真正想要检查的是n >> p的情况。

更多的洞察力形成计算复杂度,在每次迭代的Fisher评分。

glmn * p矩阵采用QR分解,采用2np^2 - (2/3)p^3触发器,而speedglm形成矩阵交叉积为n * p矩阵,其次为p * p矩阵的QR分解,涉及np^2 + (4/3)p^3触发器。因此,与n >> p一样,speedglm的计算量只有glm的一半。此外,speedglm采用的阻塞、缓存策略更好地利用了计算机硬件,具有较高的性能。

如果您有n = p,您会立即看到glm采用(4/3)p^3失败,而speedglm使用p^3 + (4/3)p^3失败,更昂贵的!实际上,在这种情况下,矩阵交叉积成为一个剪切开销!

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44207949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档