2016-07-29 67 views
8

我想计算给定数据的最小平方估计值。为什么numpy最小二乘结果与使用直接公式不同?

有几个方法可以做到这一点,一个是使用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) 

我的问题:存在其中不同的公式得到完全不同的结果(虽然也可以是没有差异的情况)。有时这些系数会变得非常大,使用一个公式,而另一个公式更好。公式是相同的,为什么结果会有很大差异?这是一些舍入误差的类型,我如何最小化?

+0

你有截获到你的X? – gobrewers14

回答

5

虽然这两个公式在数学上是等效的,但他们不是在数字上相当于!求解线性方程Ax = b的系统比通过将两边乘以A ^( - 1)更好,如Gaussian Eliminationnumpy.linalg.lstsq使用这个(和更复杂的)方法来解决底层线性系统,再加上它可以处理很多拐角情况。所以尽可能使用它。

矩阵求逆在数值上非常不稳定。除非必须,否则不要这样做。

相关问题