为什么使用NumPy最小二乘法的结果与使用直接公式结果不一致?

8

我希望计算给定数据的最小二乘估计。

有几种方法可以做到这一点,其中之一是使用numpy的最小二乘法:

import numpy
np.linalg.lstsq(X,y)[0]

X是一个矩阵,y是一个相容尺寸的向量(类型为float64)。第二种方法是直接使用公式计算结果:

import numpy
numpy.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

我的问题:有些情况下,不同的公式会给出截然不同的结果(尽管可能没有差异)。有时,使用一个公式,系数会变得非常大,而另一个公式则更加稳定。这些公式是相同的,为什么结果会如此不同?这是一种舍入误差吗?我该如何将其最小化?


你的 X 中是否添加了拦截器? - o-90
1个回答

6
虽然这两个公式在数学上是等价的,但它们在数值上并不等价!有比通过将两边乘以A^(-1)来解线性方程组Ax = b更好的方法,比如高斯消元法numpy.linalg.lstsq使用这种(以及更复杂的)方法来解决底层线性系统,并且可以处理许多边缘情况。因此,在可以使用时,请使用它。
矩阵求逆非常不稳定。除非必须这样做,否则不要这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接