了解numpy的lstsq

时间:2019-02-18 18:13:43

标签: python numpy least-squares

我了解最小二乘和的概念。解的参数反映了最小化平方误差的系数。但是我很难理解numpy.linalg中可用的lstsq函数。例如,我尝试了以下操作:

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.]])

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

2 个答案:

答案 0 :(得分:2)

我会弯腰。该方法为方程式m返回cy=mx+c。当为b参数传递2d数组时,将得到两个拟合值:一个拟合第一列,第二个拟合;就像您要拟合两个不同的数据集/向量一样。

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.])

答案 1 :(得分:0)

你的问题或多或少是一个数学问题。 np.linalg.lstsq(m1, m2) 找到 x 使得 m1(x) = m2,类似于求解 Ax = b

由于 m1m2 都是 4 x 2,为了使左侧乘法兼容,x 应该是 2 x 2。