理解numpy的lstsq

问题描述 投票:0回答:3

我理解最小二乘解之和的想法。解的参数反映了使平方误差最小化的系数。但我无法理解 lstsq

 提供的 
numpy.linalg
 功能。例如,我尝试了以下方法:

m1 = np.asarray([[1,2],[3,4],[5,6],[7,8]])

m2 = np.asarray([[9,10],[11,12],[13,14],[15,16]])


solution = np.linalg.lstsq(m1, m2)[0]

solution
的值为:

array([[-7., -8.],
   [ 8.,  9.]])

这个输出是什么意思?我无法想象/理解这个结果。

python numpy least-squares
3个回答
3
投票

我会冒险出去。该方法返回方程

m
c
y=mx+c
。当您为
b
参数传递二维数组时,您会得到两个拟合 - 一个用于第一列,一个用于第二列;就像您要求两个不同数据集/向量的拟合一样。

In [22]: sol
Out[22]: 
array([[-7., -8.],
       [ 8.,  9.]])

In [23]: sol[:,0], sol[:,1]
Out[23]: (array([-7.,  8.]), array([-8.,  9.]))

In [24]: np.linalg.lstsq(m1,m2[:,0])[0]
Out[24]: array([-7.,  8.])

In [25]: np.linalg.lstsq(m1,m2[:,1])[0]
Out[25]: array([-8.,  9.])


In [30]: np.linalg.lstsq(m1, np.array([9,11,13,15]))[0]
Out[30]: array([-7.,  8.])

In [31]: np.linalg.lstsq(m1, np.array([10,12,14,16]))[0]
Out[31]: array([-8.,  9.])

2
投票

你的问题或多或少是一个数学问题。

np.linalg.lstsq(m1, m2)
找到
x
,使得
m1(x) = m2
,类似于求解
Ax = b

由于

m1
m2
都是 4 x 2,为了使左侧乘法兼容,
x
应该是 2 x 2。


0
投票

正如他们所说,唯一的真理来源是代码...... 因此,通过检查 lstsq 实现我们发现:

def lstsq(a, b, rcond='warn'):
    "Computes the vector `x` that approximatively solves the equation ``a @ x = b``."

在你的例子中:

m1 = np.asarray([[1,2],[3,4],[5,6],[7,8]])

m2 = np.asarray([[9,10],[11,12],[13,14],[15,16]])

您正在尝试求解 m2 = m1 * p

你得到的答案是向量 p

© www.soinside.com 2019 - 2024. All rights reserved.