- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在比较 C++ 和 Python 计算的数值结果。在 C++ 中,我利用 LAPACK 的 sgels 函数来计算线性回归问题的系数。在 Python 中,我使用 Numpy 的 linalg.lstsq 函数来完成类似的任务。
sgels 和 linalg.lstsq 使用的方法在数学上有什么区别?
在数值上比较结果(即回归系数)时,预期误差是多少(例如 6 位有效数字)?
仅供引用:我绝不是 C++ 或 Python 专家,因此很难理解函数内部发生的事情。
最佳答案
查看 numpy 的源代码,在文件 linalg.py 中,lstsq依赖LAPACK的zgelsd()
对于复杂和 dgelsd()
真正的。这是与 sgels()
的区别:
dgelsd()
用于 double
同时 sgels()
用于 float
.有精度差异...dgels()
使用矩阵 A 的 QR 因式分解并假设 A 具有满秩。矩阵的条件数必须合理才能得到显着的结果。参见 this course获取方法的逻辑。另一方面,dgelsd()
利用 A 的奇异值分解。特别是,A 可能是秩亏的,并且根据附加参数 rcond
丢弃小的奇异值。或机器精度。请注意 numpy 的默认值 rcond
是-1
:负值是指机器精度。参见 this course逻辑。dgels()
比 dgelsd()
快 5 倍左右.您可能会发现 sgels()
的结果存在显着差异和 dgelsd()
如果矩阵是病态的。事实上,线性回归的误差存在界限,这取决于算法和 rcond()
的值。那是用过的。参见 the user guide of LAPACK on, Error Bounds for Linear Least Squares Problems用于估计误差和 Further Details: Error Bounds for Linear Least Squares Problems了解技术细节。
作为结论,sgels()
和 dgels()
如果 b
中的措施可以使用准确且容易与解释变量相关。例如,如果将传感器放置在排气管的导出处,就很容易猜出哪些电机在运行。但有时,源和测量之间的线性联系并不准确(A 的不确定性)或基于测量区分污染者变得更加困难(一些污染者远离传感器组并且 A 是病态的)条件)。在这种情况下,dgelsd()
并调整 rcond
争论可以提供帮助。 如有疑问,请使用 dgelsd()
并估计估计 x
上的误差根据 LAPACK's user guide .
关于python - C++(LAPACK、sgels)和Python(Numpy、lstsq)结果的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637108/
我正在比较 C++ 和 Python 计算的数值结果。在 C++ 中,我利用 LAPACK 的 sgels 函数来计算线性回归问题的系数。在 Python 中,我使用 Numpy 的 linalg.l
我是一名优秀的程序员,十分优秀!