numpy.linalg.lstsq#

linalg.lstsq(a, b, rcond=None)[原始碼]#

返回線性矩陣方程式的最小平方解。

計算向量 x,其近似求解方程式 a @ x = b。此方程式可能是欠定、適定或超定的(即,a 的線性獨立列數可能小於、等於或大於其線性獨立行數)。如果 a 是方陣且滿秩,則 x(但有捨入誤差)是方程式的「精確」解。否則,x 會最小化歐幾里得 2-範數 \(||b - ax||\)。如果有多個最小化解,則返回 2-範數 \(||x||\) 最小的解。

參數:
a(M, N) 類陣列

「係數」矩陣。

b{(M,), (M, K)} 類陣列

縱坐標或「應變數」值。如果 b 是二維的,則會針對 b 的每個 K 列計算最小平方解。

rcond浮點數,選用

用於 a 的小奇異值的截止比率。為了確定秩,如果奇異值小於 rcond 乘以 a 的最大奇異值,則將其視為零。預設值使用機器精度乘以 max(M, N)。傳遞 -1 將使用機器精度。

在 2.0 版本變更: 先前,預設值為 -1,但已發出警告表示此值將會變更。

返回:
x{(N,), (N, K)} ndarray

最小平方解。如果 b 是二維的,則解位於 xK 列中。

residuals{(1,), (K,), (0,)} ndarray

平方殘差總和:b - a @ x 中每列的平方歐幾里得 2-範數。如果 a 的秩小於 N 或 M <= N,則這會是空陣列。如果 b 是一維的,則這會是 (1,) 形狀的陣列。否則形狀為 (K,)。

rank整數

矩陣 a 的秩。

s(min(M, N),) ndarray

a 的奇異值。

引發:
LinAlgError

如果計算未收斂。

另請參閱

scipy.linalg.lstsq

SciPy 中的相似函數。

註解

如果 b 是矩陣,則所有陣列結果都會以矩陣形式返回。

範例

擬合一條線,y = mx + c,穿過一些雜訊資料點

>>> import numpy as np
>>> x = np.array([0, 1, 2, 3])
>>> y = np.array([-1, 0.2, 0.9, 2.1])

透過檢查係數,我們可以看到該線的梯度應約為 1,並在 y 軸上的截距約為 -1。

我們可以將線方程式改寫為 y = Ap,其中 A = [[x 1]]p = [[m], [c]]。現在使用 lstsq 求解 p

>>> A = np.vstack([x, np.ones(len(x))]).T
>>> A
array([[ 0.,  1.],
       [ 1.,  1.],
       [ 2.,  1.],
       [ 3.,  1.]])
>>> m, c = np.linalg.lstsq(A, y)[0]
>>> m, c
(1.0 -0.95) # may vary

繪製資料以及擬合線

>>> import matplotlib.pyplot as plt
>>> _ = plt.plot(x, y, 'o', label='Original data', markersize=10)
>>> _ = plt.plot(x, m*x + c, 'r', label='Fitted line')
>>> _ = plt.legend()
>>> plt.show()
../../_images/numpy-linalg-lstsq-1.png