我正在寻找一种方法来解决最小二乘意义上的大型超定线性方程组。矩阵是密集的。
我想使用一种即使在内存有限的情况下也能工作的方法(我们无法在 RAM 中加载完整的矩阵)。
矩阵尺寸大约是 10,000,000 x 10,000,其中我有非常多的行和恒定数量的列。
我正在寻找一种方法来解决最小二乘意义上的大型超定线性方程组。矩阵是密集的。
我想使用一种即使在内存有限的情况下也能工作的方法(我们无法在 RAM 中加载完整的矩阵)。
矩阵尺寸大约是 10,000,000 x 10,000,其中我有非常多的行和恒定数量的列。
这里的一种选择是形成正规方程并通过结果的 Cholesky 分解来解决它们经过矩阵。这将问题的条件数平方,这可能是一个重要的问题。
成型不需要超过内存,假设您可以访问一次一个。基本上,
B=零(n,n);
对于 i=1:m
B=B+A(i,:)'*A(i,:);
结尾
对于如此大量的行,简单地从行中随机抽样可能更合适而不是使用整个矩阵。这当然取决于您的问题数据。
如果身体不适是一个重大问题,那么您也可以考虑“Q-less”QR 分解方法,在这些方法中执行正交变换计算从没有计算或存储的 QR 分解并且您同时对最小二乘问题的右侧执行适当的正交变换。
我认为您的问题的答案称为递归最小二乘法。基本上你一个接一个地处理每一行,并且该算法基于伍德伯里矩阵恒等式来更新逆矩阵。享受 ;)
对于您感兴趣的大小问题,并行计算似乎是一个不错的选择。在并行计算中存在计算 QR(解决超定最小二乘问题的关键步骤)的算法。Mapreduce 架构是另一种可以处理您感兴趣的数据大小的架构。请参阅本文http://arxiv.org/pdf/1301.1071v1.pdf。
如果您仅限于单个处理器,则可以实现 Tall skinny QR 算法。本质上,它尝试递归地计算 QR 中的“R”,并且可以通过从磁盘顺序加载矩阵的部分来应用。本文提供了详细信息http://www.netlib.org/lapack/lawnspdf/lawn204.pdf。