谁能详细解释linalg.lstsq的回归?



虽然提供了linalg.lstsq文档。我仍然觉得很难理解,因为它不是很详细。

x : {(N,(, (N, K(} ndarray

最小二乘解。如果 b 是二维的,则解在 x 的 K 列。

残差 : {(1,(, (K,(, (0,(} ndarray

残差总和;b 中每列的欧几里得 2 范数平方 - a*x。如果 a 的秩是<= N,则这是一个空数组。如果 b 是一维的,这是一个 (1,( 形状数组。否则形状为 (K,(。

等级 : int

矩阵 a 的秩。

s : (min(M, N(,( ndarray

a的奇异值。

我试图观察输出。但我只知道排名是 2。其余的,我不明白为什么会这样。

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
print(A)
print('-------------------------')
print(np.linalg.lstsq(A, y, rcond=None))

[[0. 1.]
[1. 1.]
[2. 1.]
[3. 1.]]
-------------------------
(array([ 1.  , -0.95]), array([0.05]), 2, array([4.10003045, 1.09075677]))

我不明白元组"(N, (, (N, K(, (1,(, (K,(,(0,(, (M, N("在文档中代表什么。

例如,np.linalg.lstsq(A, y, rcond=None)[0]array([ 1. , -0.95])它与{(N,(,(N,K(}有何关系?

这些元组是输入和输出的可能形状。 在您的示例中,A.shape = (4, 2)y.shape = (4,)。 查看文档,M = 4N = 2,我们正在处理没有K的情况。 所以输出的形状应该是x.shape = (N,) = (2,)residuals.shape = (1,)s.shape = (min(M, N),) = (2,)

让我们一次看一个输出

>>> x, residuals, rank, s = np.linalg.lstsq(A, y, rcond=None)

xA @ x = y的最小二乘解,所以它最小化np.linalg.norm(A @ x - y)**2

>>> A.T @ (A @ x - y)
array([1.72084569e-15, 2.16493490e-15])

其他输出可以告诉您此解决方案有多好,以及它对数值误差的敏感性。

residualsA @ xy之间不匹配的平方范数:

>>> np.linalg.norm(A @ x - y)**2
0.04999999999999995
>>> residuals[0]
0.04999999999999971

rankA的等级:

np.linalg.matrix_rank(A)
2
>>> rank
2

s包含A的奇异值

>>> np.linalg.svd(A, compute_uv=False)
array([4.10003045, 1.09075677])
>>> s
array([4.10003045, 1.09075677])

你熟悉数学概念吗?

最新更新