C++(LAPACK,SGELS)和Python(NUMPY,LSSTQ)结果的差异

2024-10-01 22:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

< >我比较C++和Python计算的数值结果。在C++中,我利用LAPACK的SGELS函数来计算线性回归问题的系数。在Python中,我使用Numpy的利纳格lstsq类似任务的函数。

sgels和利纳格?lstsq?

在对结果(即回归系数)进行数值比较时,预期误差(如6位有效数字)是多少?

我不是一个C++或Python专家,这使得很难理解函数里面的内容。


Tags: 函数numpy利用内容线性数值误差专家
1条回答
网友
1楼 · 发布于 2024-10-01 22:43:29

看看numpy的源代码,在文件linalg.py中,lstsq依赖LAPACK的zgelsd()表示复杂,而{}表示实际。以下是sgels()的区别:

  • dgelsd()代表double,而{}代表float。有不同的精度。。。在
  • dgels()利用矩阵A的QR分解,并假设A具有满秩。矩阵的条件数必须合理,才能得到有意义的结果。请参阅this course获取方法的逻辑。另一方面,dgelsd()利用了A的奇异值分解,特别地,A可以是秩亏并根据附加参数rcond或机器精度来讨论小的奇异值。请注意,numpy的rcond的默认值是-1:负值表示机器精度。有关逻辑,请参见this course。在
  • 根据benchmark of LAPACK,on可以预期dgels()dgelsd()快大约5倍。在

如果矩阵是病态的,sgels()和{}的结果可能会有显著差异。实际上,线性回归的误差是有界的,这取决于算法和使用的rcond()的值。请参见the user guide of LAPACK on, Error Bounds for Linear Least Squares Problems以了解错误的估计值,Further Details: Error Bounds for Linear Least Squares Problems可获取技术细节。在

结论是,sgels()和{}可以使用,如果{}中的度量是准确的并且容易与解释变量相关。例如,如果传感器安装在排气管的出口处,就很容易猜出哪个发动机在运转。但有时,污染源和测量值之间的线性联系并不精确(A术语的不确定性),或者根据测量结果对污染源进行区分变得更加困难(一些污染源远离传感器组,A条件不佳)。在这种情况下,dgelsd()和调整rcond参数可能会有所帮助。每当有疑问时,使用dgelsd()并根据LAPACK's user guide估计x的误差。

相关问题 更多 >

    热门问题