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

paddle.set_device("cpu")
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])
# [[ 0.78350395, -0.22165027, -0.62371236],
# [-0.11340097,  0.78866047,  1.14948535]]
print(results[1])
# [19.81443405, 10.43814468, 30.56185532])
print(results[2])
# 2
print(results[3])
# [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])
# [[ 0.39386186,  0.10230173,  0.93606132],
# [ 0.10741687, -0.29028133,  0.11892585],
# [-0.05115091,  0.51918161, -0.19948854]]
print(results[1])
# []