更新 QR 分解最小二乘

计算科学 线性代数 最小二乘
2021-12-12 05:28:11

经过一些研究,我发现解决最小二乘问题的最稳定的数值方法是通过 QR 分解。为了n观察次数和p它采用以下形式的参数数量:

Qn,pRp,p=Xn,p

在哪里R是一个正方形上三角形和Q是正交的。解决方案是:

β^=(XTX)1XTz
β^=R1QTz

我有兴趣不断更新我的最小二乘模型 β^随着新数据的到来xn+1,xn+2,xn+3...Rp,我们可以定义X=[Xxn+1xn+2...]添加了行和项目y.

我发现它以某种方式称为秩 k 矩阵更新或与对称秩 k 更新 (SYRK) 级别 3 BLAS 有关。我找不到更多关于如何在我的 LS QR 分解中制定这个的信息。

任何想法或提示都非常受欢迎。

2个回答

SYRK我认为在这里并不重要;它只是碰巧具有相同名称“rank k update”的其他东西。

在您的情况下,您需要知道如何通过插入行来更新 QR 分解;一个很好的参考是 Golub,Van Loan,第 6.5.3 节:附加或删除行。

许多计算环境已经为您实现了它,例如,参见 Matlab's qrinsert、 Python's scipy.linalg.qr_insert、 Julia'sQRupdate.jl这个 Fortran package

如果您要添加很多行,那么您将需要使用 Demmel 等人,2008 年的高瘦 QR 算法 (TSQR),

https://arxiv.org/abs/0806.2159

该算法可以与 Elmroth 和 Gustavson,2000 的第 3 级 BLAS QR 算法相结合,以有效地更新每个新行块的分解。最好将新行保存到一个大块中并进行一次更新,而不是一次更新一行。

AC 实现可以在 GSL 库中找到,

https://www.gnu.org/software/gsl/doc/html/lls.html#tall-skinny-qr-tsqr-approach