numpy.linalg.lstsq這個是什麼意思啊?
01-24
,最好可以舉個例子,官方的解釋有些看不懂,謝謝
謝邀,作為Python初學者,很希望能和大家一起學習交流。 我打開它的文檔字元串看了下,發現裡面對原理講述得挺詳細,可惜我數學底子不夠,諸如裡面所述的Euclidean 2-norm(歐幾里德範數)瞬間把我弄蒙了,不過後來我發現這不影響用戶理解這個函數的功能。
簡單說,它就是用最小二乘法擬合數據得到一個形如y = mx + c的線性方程(參考文檔字元串里的原話:Return the least-squares solution to a linear matrix equation)
我把官方給出的實例試驗了下,然後根據我的理解加了點注釋,希望能對題主起一點參考作用。lstsq 是 LeaST SQuare (最小二乘)的意思。我們常用最小二乘法來求解超定線性方程組。下面的代碼比較了利用上面貼圖中的公式得到的結果,和NumPy中的lstsq得到的結果,可見是一致的。
import numpy as np
x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T
Am = np.mat(A)
ym = np.mat(y).T
print np.linalg.lstsq(A, y)[0]
print np.linalg.inv(Am.T * Am) * Am.T * ym
print np.linalg.pinv(Am) * ym
輸出結果為:
[ 1. -0.95]
[[ 1. ]
[-0.95]]
[[ 1. ]
[-0.95]]
推薦閱讀: