我有一组数据 z(0), z(1), z(2)...,z(n)
我目前正在用一个 2 变量多项式拟合种类 p(x,y) = a(1)*x^2+a(2)*y^2+a(3)*x*y+a(4)
。我有 i=1,...,n
(x(i),y(i))
我强加的坐标是 p(x(i ),y(i))=z(i)
。通过这种方式,我有一个可以使用 Eigen SVD 解决的超定系统.我正在寻找一种可以处理异常值的更复杂的方法,例如最小二乘中位数稳健回归(如 here 所述),但我还没有找到 2 个变量的 C++ 实现。我查看了 GSL,但似乎没有 2 个变量函数。我能想到的唯一其他解决方案是在 ROOT 中使用 TGraph2D .你知道任何其他解决方案吗?也许是数字食谱?因为我正在编写 C++ 代码,所以我更喜欢 C 或 C++ 实现。
最佳答案
由于还没有给出答案,但我仍在努力解决这个问题,我会在这里分享我的进展。
TLinearFitter 类有一个拟合方法,允许您选择稳健拟合 - 最小修剪二乘回归 (LTS):
https://root.cern.ch/root/html532/TLinearFitter.html
另一种可能的解决方案,可能更耗时,但从长远来看可能更有效的是编写我自己的函数以使其最小化,并使用: https://projects.coin-or.org/Ipopt最小化它。尽管在这种方法中有一个更大的“步骤”。我不知道如何使用这个库,而且我还没有(还?)找到一个很好的教程来理解它。
此处:https://wis.kuleuven.be/stat/robust/software有一个名为 PROGRESS 的 LMedS 算法的 Fortran 实现。因此,另一种可能的解决方案是将该软件移植到 C/C++ 并从中创建一个库。
关于c++ - 最小二乘中位数稳健回归 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550466/