相关疑难解决方法(0)

大规模伪逆

我想计算一个巨大矩阵的Moore-Penrose伪逆.理想情况下,我想在具有2300万行和1000列的矩阵上进行此操作,但如果需要,我可以通过仅在我的实验的一部分上运行来将行数减少到400万.

显然,将矩阵加载到内存并在其上运行SVD是行不通的. 维基百科指向Krylov子空间方法并提及Arnoldi,Lanczos,Conjugate梯度,GMRES(广义最小残差),BiCGSTAB(biconjugate梯度稳定),QMR(准最小残差),TFQMR(无转置QMR)和MINRES(最小残差) )方法是最好的Krylov子空间方法之一.但我不知道从哪里开始.计算这样一个巨大矩阵的伪逆是否可行?如果是这样,使用哪些算法或软件库?我有一个大型计算集群,所以欢迎并行方法.

这个答案指向R包biglm.那会有用吗?有人用过吗?我通常使用Python,但不介意使用其他语言和工具来完成这项特定任务.

algorithm hpc linear-algebra

8
推荐指数
1
解决办法
1646
查看次数

具有glmnet和lm的普通最小二乘法

stackoverflow.com/q/38378118中询问了此问题,但没有令人满意的答案。

LASSO与?= 0等效于普通的最小二乘,但是R glmnet()lm()R中似乎不是这种情况。为什么?

library(glmnet)
options(scipen = 999)

X = model.matrix(mpg ~ 0 + ., data = mtcars)
y = as.matrix(mtcars["mpg"])
coef(glmnet(X, y, lambda = 0))
lm(y ~ X)
Run Code Online (Sandbox Code Playgroud)

它们的回归系数最多相符2个有效数字,这可能是由于其优化算法的终止条件略有不同:

                  glmnet        lm
(Intercept)  12.19850081  12.30337
cyl          -0.09882217  -0.11144
disp          0.01307841   0.01334
hp           -0.02142912  -0.02148
drat          0.79812453   0.78711
wt           -3.68926778  -3.71530
qsec          0.81769993   0.82104
vs            0.32109677   0.31776
am            2.51824708   2.52023
gear          0.66755681   0.65541
carb         -0.21040602  -0.19942
Run Code Online (Sandbox Code Playgroud)

当添加交互项时,差异会更糟。

X = model.matrix(mpg ~ 0 + . + . …
Run Code Online (Sandbox Code Playgroud)

r least-squares lm glmnet

2
推荐指数
1
解决办法
1213
查看次数

标签 统计

algorithm ×1

glmnet ×1

hpc ×1

least-squares ×1

linear-algebra ×1

lm ×1

r ×1