numpy.linalg.lstsq #
- 利纳尔格。lstsq ( a , b , rcond = '警告' ) [来源] #
返回线性矩阵方程的最小二乘解。
计算近似求解方程 的 向量x。该方程可能是欠定、良定或超定的(即,a的线性独立行的数量可以小于、等于或大于其线性独立列的数量)。如果a是平方且满秩,则x(除舍入误差外)是方程的“精确”解。否则,x最小化欧几里得 2-范数
a @ x = b
\(||b - ax||\)。如果有多个最小化解,则选择具有最小 2-范数的解\(||x||\)被返回。- 参数:
- 一个(M, N) 类数组
“系数”矩阵。
- b {(M,), (M, K)} 类数组
纵坐标或“因变量”值。如果b是二维的,则为b的K列中的每一列计算最小二乘解。
- rcond浮动,可选
a的小奇异值的截止比。出于排名确定的目的,如果奇异值小于rcond乘以a的最大奇异值,则将其视为零。
版本 1.14.0 中已更改:如果未设置,则会给出 FutureWarning。之前的默认值
-1
将使用机器精度作为rcond参数,新的默认值将使用机器精度乘以max(M, N)。要消除警告并使用新的默认行为,请使用rcond=None
,要继续使用旧行为,请使用rcond=-1
。
- 返回:
- x {(N,), (N, K)} ndarray
最小二乘解。如果b是二维的,则解位于x的K列中。
- 残差{(1,), (K,), (0,)} ndarray
残差平方和: 中每列的欧几里得 2-范数平方 。如果a的秩< N 或 M <= N,则这是一个空数组。如果b是一维,则这是一个 (1,) 形状的数组。否则形状为 (K,)。
b - a @ x
- 排名整数
矩阵a的秩。
- s (min(M, N),) ndarray
a的奇异值。
- 加薪:
- 林算法错误
如果计算不收敛。
也可以看看
scipy.linalg.lstsq
SciPy 中的类似功能。
笔记
如果b是矩阵,则所有数组结果都以矩阵形式返回。
例子
通过一些嘈杂的数据点拟合一条线:
y = mx + c
>>> x = np.array([0, 1, 2, 3]) >>> y = np.array([-1, 0.2, 0.9, 2.1])
通过检查系数,我们发现该线的梯度应约为 1,并且与 y 轴的交点或多或少为 -1。
我们可以将直线方程重写为、其中 和。现在用它来求解p:
y = Ap
A = [[x 1]]
p = [[m], [c]]
lstsq
>>> 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, rcond=None)[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()