irpas技术客

numpy.linalg.lstsq()详解以及用法示例_三度的冰可乐_np.linalg.lstsq

网络投稿 5786

详解

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

计算近似求解方程的向量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’)


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #nplinalglstsq #将最小二乘解返回到线性矩阵方程 #计算近似求解方程的向量x #否则x最小化欧几里得 #2 #范数