线性回归 - 用什么算法来解决最小二乘法 - 逆或LU或......?

时间:2013-10-21 17:05:02

标签: algorithm matrix least-squares matrix-inverse

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

即:(如果我有m个真实世界值,并且在两个独立变量的情况下ab

C + D*a1 + E* b1 = y1

C + D*a2 + E* b2 = y2

...

C + D*am + E* bm = ym

我想使用最小二乘解决方案找到最合适的直线。

我将使用矩阵表示法 所以

enter image description here

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

问题 解决这个公式的最佳方法是什么?我应该计算enter image description here

的倒数

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

修改

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

解决密集超定系统Ax = b:

时,需要考虑两种直接的方法
  1. 形式A ^ T A x = A b,然后Cholesky-factorise A ^ T A = L L ^ T,然后进行两次反向求解。这通常会让你得到一个精确到sqrt(机器epsilon)的答案。

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

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