numpy.linalg.lstsq()详解以及用法示例

详解

将最小二乘解返回到线性矩阵方程。

计算近似求解方程的向量x。
该方程可能未确定、良好或过度确定(即,线性独立行数可以小于、等于或大于其线性独立列数)。
如果a是平方且为全秩,则x(但对于舍入误差)是等式的"精确"解。否则,x最小化欧几里得 2 范数 。
如果有多个最小化解,则返回具有最小 2 范数的解。

参数
a:(M, N) array_like
"系数"矩阵。

b:{(M,), (M, K)} array_like
纵坐标或"因变量"值。如果b是二维的,则为b的每个K列计算最小二乘解。

rcond:float, 可选
小奇异值的截止比。出于秩确定的目的,如果奇异值小于rcond乘以的最大奇异值,则将其视为零。

在1.14.0版中更改:如果未设置,则给出未来警告。以前的默认值将使用机器精度作为rcond参数,新的默认值将使用机器精度时间max(M, N)。要使警告静音并使用新的默认值,请使用 ,若要继续使用旧行为,请使用 。
-1rcond=Nonercond=-1

返回
x:{(N,), (N, K)} ndarray
最小二乘解。如果b是二维的,则解位于x的K列中。

残差:{(1,), (K,), (0,)} ndarray
残差平方和:中每列的欧几里得 2 范数平方。如果a的秩< N 或 M <= N,则这是一个空数组。如果b是一维的,则这是一个 (1,) 形状数组。否则,形状为 (K,)。b – a @ x

秩:int
矩阵的秩a.

s:(min(M, N),) ndarray
的奇异值。

用法示例

首先定义x,y

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

我们可以理解为4个点的x,y坐标已经给出,目标就是找到一条能最拟合这4个点的线
那么可以首先假设这条线是

y = kx + b

x有 x1, x2, x3, x4
同样的,y也有 y1, y2, y3, y4
那么我就可以看作是矩阵的相乘,也就是

可以看到左边第二列增加了一列1,是为了矩阵相乘正确表示y = kx + b
所以有以下代码

A = np.vstack([x,np.ones(len(x))]).T

np.vstack() 表示vertical stack,即上下堆叠,也即是把[x1, x2, x3, x4] 与 [1, 1, 1, 1]上下堆叠在一起形成系数矩阵A。
打印A

将A,y代入到np.linalg.lstsq()并打印

s=np.linalg.lstsq(A, y, rcond=None)
s

结果如下:

接下来分析输出,lstsq的输出包括四部分:回归系数、残差平方和、自变量X的秩、X的奇异值。
只需要回归系数即k和b
所以只需要取输出结果的第一个元素s[0]

k,b = np.linalg.lstsq(A, y, rcond=None)[0]
k,b

结果如下:

总结
形如np.linalg.lstsq(a, b, rcond=‘warn’)

lstsq的输入包括三个参数,a为自变量X,b为因变量Y,rcond用来处理回归中的异常值,一般不用。

lstsq的输出包括四部分:回归系数、残差平方和、自变量X的秩、X的奇异值。一般只需要回归系数就可以了。

参考
numpy.linalg.lstsq
numpy.linalg.lstsq这个是什么意思
np.linalg.lstsq(a, b, rcond=‘warn’)

来源:三度的冰可乐

物联沃分享整理
物联沃-IOTWORD物联网 » numpy.linalg.lstsq()详解以及用法示例

发表评论