lstsq

paddle.linalg. lstsq ( x, y, rcond=None, driver=None, name=None ) [源代码]

求解线性方程组的最小二乘问题。

参数

  • x (Tensor):形状为 (*, M, N) 的矩阵 Tensor, * 为零或更大的批次维度。数据类型为 float32 或 float64 。

  • y (Tensor):形状为 (*, M, K) 的矩阵 Tensor, * 为零或更大的批次维度。数据类型为 float32 或 float64 。

  • rcond (float,可选):默认值为 None,用来决定 x 有效秩的 float 型浮点数。当 rcondNone 时,该值会被设为 max(M, N)x 数据类型对应的机器精度。

  • driver (str,可选):默认值为 None,用来指定计算使用的 LAPACK 库方法。CPU 下该参数的合法值为 'gels','gelsy' (默认),'gelsd','gelss';CUDA 下该参数的合法值为 'gels' (默认) 。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tuple,包含 solutionresidualsranksingular_values

  • solution 指最小二乘解,形状为 (*, N, K) 的 Tensor。

  • residuals 指最小二乘解对应的残差,形状为 (*, K) 的 Tensor;当 M > Nx 中所有矩阵均为满秩矩阵时,该值会被计算,否则返回空 Tensor。

  • rankx 中矩阵的秩,形状为 (*) 的 Tensor;当 driver 为 'gelsy', 'gelsd', 'gelss' 时,该值会被计算,否则返回空 Tensor。

  • singular_valuesx 中矩阵的奇异值,形状为 (*, min(M, N)) 的 Tensor;当 driver 为 'gelsd', 'gelss' 时,该值会被计算,否则返回空 Tensor。

代码示例

>>> import paddle

>>> x = paddle.to_tensor([[1, 3], [3, 2], [5, 6.]])
>>> y = paddle.to_tensor([[3, 4, 6], [5, 3, 4], [1, 2, 1.]])
>>> results = paddle.linalg.lstsq(x, y, driver="gelsd")
>>> print(results[0])
Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
[[ 0.78350395, -0.22165027, -0.62371236],
 [-0.11340097,  0.78866047,  1.14948535]])
>>> print(results[1])
Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True,
[19.81443405, 10.43814468, 30.56185532])
>>> print(results[2])
Tensor(shape=[], dtype=int32, place=Place(cpu), stop_gradient=True,
2)
>>> print(results[3])
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[9.03455734, 1.54167950])

>>> x = paddle.to_tensor([[10, 2, 3], [3, 10, 5], [5, 6, 12.]])
>>> y = paddle.to_tensor([[4, 2, 9], [2, 0, 3], [2, 5, 3.]])
>>> results = paddle.linalg.lstsq(x, y, driver="gels")
>>> print(results[0])
Tensor(shape=[3, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
[[ 0.39386186,  0.10230169,  0.93606132],
 [ 0.10741688, -0.29028130,  0.11892584],
 [-0.05115093,  0.51918161, -0.19948851]])
>>> print(results[1])
Tensor(shape=[0], dtype=float32, place=Place(cpu), stop_gradient=True,
[])