python - 为什么 numpy 最小二乘结果与使用直接公式不同?

标签 python 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)

我的问题:在某些情况下,不同的公式会给出截然不同的结果(尽管可能没有区别)。有时系数变得非常大,使用一个公式,而另一个表现得更好。公式是一样的,为什么结果会相差那么大呢?这是某种类型的舍入误差吗?我该如何最小化它?

最佳答案

虽然这两个公式在数学上是等价的,但它们在数值上等价!有比两边都乘以 A^(-1) 更好的方法来求解线性方程组 Ax = b,例如 Gaussian Elimination . numpy.linalg.lstsq 使用这种(以及更复杂的)方法来求解底层线性系统,此外它还可以处理很多极端情况。所以尽可能使用它。

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

关于python - 为什么 numpy 最小二乘结果与使用直接公式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648730/

相关文章:

python - Numpy 沿轴应用并获取行索引

python - 从 .csv 文件创建一个 numpy 数组,但我只能得到数组中的第一行——我错过了什么?

python - future 警告 : Method . ptp

python - 使用 pip 将 Python 库安装到 macOS 默认 Python (2.7.10)

python - 我能够读取文件,但无法在 Google Colab 上看到结果

Python:使用正则表达式从所有行中删除空格

python - 如何使用链式比较对数组进行 bool 掩码?

python - 转换具有 numpy 数组的列将其转换为以 dtype 作为对象的 numpy 数组

python - 我试图在两次之间循环,从 8 :00 to 17:00 for every 15 mins

python - 如何在python Wheel中打包perl文件