【问题标题】:Accurate least-squares fit algorithm needed需要准确的最小二乘拟合算法
【发布时间】:2010-12-01 20:14:15
【问题描述】:

我尝试了两种实现最小二乘拟合 (LSF) 算法的方法,如 here 所示。

第一个代码只是教科书的方法,如 Wolfram 在 LSF 上的页面所述。第二个代码重新排列方程以最小化机器错误。两种代码都为我的数据产生了相似的结果。我将这些结果与 Matlab 的 p=polyfit(x,y,1) 函数进行了比较,使用相关系数来测量拟合的“优度”并比较 3 个例程中的每一个。我观察到虽然所有 3 种方法都产生了良好的结果,但至少对于我的数据而言,Matlab 的例程最适合(其他 2 种例程的结果彼此相似)。

Matlab 的 p=polyfit(x,y,1) 函数使用 Vandermonde 矩阵、V(n x 2 矩阵)和 QR 分解来解决最小二乘问题。在 Matlab 代码中,它看起来像:

V = [x1,1; x2,1; x3,1; ... xn,1]  % this line is pseudo-code
[Q,R] = qr(V,0);
p = R\(Q'*y);      % performs same as p = V\y

我不是数学家,所以我不明白为什么它会更准确。尽管差异很小,但在我的情况下,我需要从 LSF 中获得斜率并将其乘以一个大数,因此我的结果中会出现任何精度的提高。

由于无法进入的原因,我无法在工作中使用 Matlab 的例程。所以,我想知道是否有人有一个更准确的基于方程的方法推荐,我可以使用它是对上述两种方法的改进,在舍入误差/机器精度/等方面。

感谢任何 cmets!提前致谢。

【问题讨论】:

  • QR 是求解方程组的稳定方法。如果您的数据接近退化,SVD 可能是一种更好的方法(尽管计算成本更高)。正如您所展示的,永远不应该天真地处理最小二乘问题。

标签: algorithm least-squares


【解决方案1】:

对于多项式拟合,您可以创建一个Vandermonde 矩阵并求解线性系统,就像您已经完成的那样。

另一种解决方案是使用Gauss-Newton 之类的方法来拟合数据(由于系统是线性的,因此一次迭代就可以了)。方法之间存在差异。一个可能的原因是Runge's phenomenon

【讨论】:

  • 谢谢,Gauss-Newton 会比最小二乘拟合更准确吗?我认为我不会看到龙格现象,因为我只是建模为 y=mx+b(一阶)。
  • 我没有看到第一个订单,抱歉。但是您如何测量准确性?只是用 Matlab 比较结果?
  • 我正在查看每种方法产生的相关系数,并假设更高的相关性表明更准确地拟合数据(例如更小的最小二乘误差)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2014-03-05
相关资源
最近更新 更多