繁体   English   中英

numpy.linalg.lstsq 和 scipy.linalg.lstsq 有什么区别?

[英]What is the difference between numpy.linalg.lstsq and scipy.linalg.lstsq?

lstsq尝试解决Ax=b最小化|b - Ax| . scipy 和 numpy 都提供了一个linalg.lstsq function 接口非常相似。 该文档没有提到使用了哪种算法,无论是scipy.linalg.lstsq还是numpy.linalg.lstsq ,但它似乎做的几乎相同。

scipy.linalg.lstsqnumpy.linalg.lstsq的实现似乎有所不同。 两者似乎都使用 LAPACK,两种算法似乎都使用 SVD。

区别在哪里? 我应该使用哪一个?

注意:不要将linalg.lstsqscipy.optimize.leastsq混淆,后者也可以解决非线性优化问题。

如果我正确阅读源代码(Numpy 1.8.2,Scipy 0.14.1), numpy.linalg.lstsq()使用LAPACK例程xGELSDscipy.linalg.lstsq()使用xGELSS

LAPACK手册 2.4

子程序xGELSD明显快于旧版xGELSS,特别是对于大问题,但根据矩阵尺寸可能需要更多的工作空间。

这意味着Numpy更快但使用更多内存。

2017年8月更新:

Scipy现在默认使用xGELSD https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html

Numpy 1.13 - 2017年6月

随着NumPy的1.13和0.19 SciPy的, 两者scipy.linalg.lstsq()numpy.linalg.lstsq()默认调用相同的LAPACK代码DSGELD(见LAPACK文档 )。

但是,两个函数之间当前的重要区别在于采用的默认RCOND LAPACK参数(由Numpy称为rcond ,由Scipy称为cond ),它定义了奇异值的阈值。

Scipy使用良好且稳健的默认阈值RCOND=eps*max(A.shape)*S[0] ,其中S[0]A的最大奇异值,而Numpy使用默认阈值RCOND=-1 ,其对应无论A的值如何,在LAPACK中设置等于机器精度的阈值。

Numpy的默认方法在实际应用中基本上是无用的,并且当A几乎排序不足时通常会导致非常简并的解决方案,浪费了DSGELD使用的奇异值分解SVD的准确性。 这意味着在Numpy中应始终使用可选参数rcond

更新:Numpy 1.14 - 2018年1月

我在numpy.linalg.lstsq()中报告了错误的rcond默认值(参见上面的部分),该函数现在在Numpy 1.14中引发了FutureWarning (参见Future Changes )。

未来的行为在scipy.linalg.lstsq()numpy.linalg.lstsq()中都是相同的。 换句话说,Scipy和Numpy不仅会使用相同的LAPACK代码,还会使用相同的默认值。

要在Numpy 1.14中开始使用正确的(即将来的)默认值,应该使用显式的rcond=None调用numpy.linalg.lstsq()

numpy.linalg.lstsqscipy.linalg.lstsq是两个不同的函数,可用于解决线性最小二乘问题。

这两个函数之间的主要区别在于scipy.linalg.lstsqnumpy.linalg.lstsq功能更完整、更健壮。

以下是这两个函数之间的一些主要区别:

  • scipy.linalg.lstsq可以比numpy.linalg.lstsq更稳健地处理秩亏矩阵(即具有线性相关行的矩阵),这在给定秩亏矩阵时可能会产生意想不到的结果。
  • scipy.linalg.lstsq有额外的可选参数,允许您更详细地指定求解器的行为。 例如,您可以指定是要计算矩阵的完整奇异值分解 (SVD) 还是截断奇异值分解 (SVD),或者是否要使用效率更高但稳定性较差的算法。
  • scipy.linalg.lstsq可以处理更复杂的线性最小二乘问题,例如变量有界的问题或涉及线性等式和不等式约束的问题。 numpy.linalg.lstsq仅限于解决 Ax = b 形式的基本线性最小二乘问题。

总的来说, scipy.linalg.lstsq是解决线性最小二乘问题的功能更完备和健壮的 function,如果您的代码中需要解决此类问题,建议使用 function。 numpy.linalg.lstsq是一个更简单的 function 可能足以解决基本的线性最小二乘问题,但可能不适用于更复杂的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM