4

我正在研究对一个或多个自变量执行线性回归的算法。

也就是说:(如果我有m真实世界的值并且在两个自变量a和的情况下b

C + D*a1 + E* b1 = y1

C + D*a2 + E* b2 = y2

...

C + D*am + E* bm = ym

我想使用最小二乘法来找到最合适的直线。

我将使用矩阵符号,所以

在此处输入图像描述

其中 Beta 是向量 [C, D, E],其中这些值将是最佳拟合线。

问题 解决这个公式的最佳方法是什么?我应该计算的倒数在此处输入图像描述

或者我应该使用矩阵的 LU 分解/分解。每个在大量数据上的性能是什么(即 的大值m,可能是 10^8 ...)

编辑

如果答案是使用 Cholesky 分解或 QR 分解,是否有任何实现提示/简单的库可供使用。我正在用 C/C++ 编码。

4

2 回答 2

2

解决密集超定系统 Ax=b 的两个直接方法浮现在脑海中:

  1. 形成 A^TA x = A b,然后 Cholesky-factorise A^TA = LL^T,然后进行两次反解。这通常会让你得到一个精确到 sqrt(machine epsilon) 的答案。

  2. 计算 QR 分解 A = Q*R,其中 Q 的列是正交的,R 是正方形和上三角形,使用类似 Householder 消除的方法。然后通过反向替换为 x 求解 Rx = Q^T b。这通常会让你得到一个精确到机器 epsilon 的答案——精度是 Cholesky 方法的两倍,但它需要的时间大约是两倍。

对于稀疏系统,我通常更喜欢 Cholesky 方法,因为它可以更好地利用稀疏性。

于 2013-10-21T19:27:36.730 回答
1

您的 X^TX 矩阵应该有 Cholesky 分解。我会在 LU 之前研究这种分解。它更快:http ://en.wikipedia.org/wiki/Cholesky_decomposition

于 2013-10-21T17:11:59.153 回答