hxd*_*011 6 performance regression r glm speedglm
我试图用来speedglm实现更快的GLM估计 glm,但为什么它更慢?
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
Run Code Online (Sandbox Code Playgroud)
李哲源*_*李哲源 12
speedglmover 的效率glm是将n * p模型矩阵缩减为p * p矩阵的方式.但是,如果有n = p,则没有有效减少.你真正想要检查的是这种n >> p情况.
在Fisher评分的每次迭代中,更多的洞察形成计算复杂性.
glm对于n * p矩阵使用QR分解采用2np^2 - (2/3)p^3FLOP,同时speedglm形成矩阵的矩阵交叉积n * p,然后是矩阵的QR分解p * p,涉及np^2 + (4/3)p^3FLOP.因此n >> p,speedglm只有一半的计算量glm.此外,使用的阻塞,缓存策略可以speedglm更好地利用计算机硬件,从而提供高性能.
如果你有n = p,你会立即看到glm需要(4/3)p^3FLOP,但speedglm需要p^3 + (4/3)p^3FLOP,更贵!实际上,在这种情况下,矩阵交叉积成为剪切开销!
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |