我正在研究算法以对一个或多个自变量执行线性回归。
即:(如果我有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 ++编写。
答案 0 :(得分:1)
你的X ^ TX矩阵应该有Cholesky分解。我会在LU之前研究这种分解。速度更快:http://en.wikipedia.org/wiki/Cholesky_decomposition
答案 1 :(得分:1)
解决密集超定系统Ax = b:
时,需要考虑两种直接的方法形式A ^ T A x = A b,然后Cholesky-factorise A ^ T A = L L ^ T,然后进行两次反向求解。这通常会让你得到一个精确到sqrt(机器epsilon)的答案。
计算QR因子分解A = Q * R,其中Q的列是正交的,R是正方形和上三角形,使用像Householder消除的东西。然后通过反向替换求解x的Rx = Q ^ T b。这通常可以让你得到一个关于机器epsilon的精确答案---两倍于Cholesky方法的精度,但它需要大约两倍的时间。
对于稀疏系统,我通常更喜欢Cholesky方法,因为它更好地利用了稀疏性。