【问题标题】:Polynomial curve fitting多项式曲线拟合
【发布时间】:2018-02-16 17:07:01
【问题描述】:

我想使用最小二乘技术实现多项式曲线拟合,但具有各种误差函数,即不仅仅是最小二乘。有没有办法在 MATLAB 中做到这一点? (我想比较不同误差函数的结果。我还想使用需要更改误差函数的正则化)。

您能否分享任何资源(MATLAB/C++),可以为如何在没有内置函数的情况下实现曲线拟合提供一些帮助?我只能找到那些使用高斯消除的——这和最小二乘拟合一样吗?

【问题讨论】:

  • 您不需要为自己辩护,但如果回答者知道为什么您希望避免使用最小二乘,这可能(或可能不会)帮助回答者提供信息丰富的答案。您的问题具有广泛的含义,因此再多一点动机可能会充分缩小范围,从而以合理的长度邀请一个好的答案。
  • @thb 添加了我的理由 :)

标签: regression model-fitting


【解决方案1】:

高斯消元与最小二乘拟合不同。与最小二乘拟合不同的意义类似于汽油与驾驶不同的意义。

高斯消元法是一种求解线性系统的技术。最小二乘求解线性系统并做一些其他事情,因此它可以使用高斯消元法。

一般而言,据我所知,广义 Moore-Penrose 意义上的最小二乘拟合(参见第 13.6 节 here; 谨慎,重读)是拟合参数的规范线性方法。如果您希望使用不相关的误差函数,那么您将不得不 (a) 脱离矩阵技术或 (b) 使用效率较低且无法达到 Moore-Penrose 功能的迭代矩阵技术。

我意识到这可能不是您想要的答案,但我相信它就是答案。如果您发现不同,请告诉我们。

【讨论】:

    【解决方案2】:

    多项式曲线拟合是学习“机器学习”的第一步。我的建议是先尝试最小二乘,然后了解曲线拟合的概率处理。您可以在 (Bishop's Book) 中找到它。总结是,您可以假设输入值 (x) 的目标值 (t) 来自高斯分布。所以误差可以通过取目标值的最大似然来最小化。这在开始时看起来很容易,但直观的含义有很多见解。我建议您使用 matlab 或 r 尝试此操作。

    【讨论】:

      【解决方案3】:

      在 MIT 许可 here 下,GitHub 中有一个 C++ 中多项式回归的开源实现。它支持用于输入的标准 STL 容器、用于数据和计算的单独类型(在使用 __float128 运行 64 度回归时输入和读取 uint8_t),可以区分、集成和计算残差。使用起来并不复杂:

        std::vector<float> x, y; // provide data
        auto polynomial = polynomial_regression<2>(x, y);  // second degree polynomial
      
        // Interpolate at 0.5:
        std::cout << "f(0.5) = " << polynomial(0.5) << std::endl;
      
        // Coefficients:
        for (auto a: polynomial) {
          std::cout << a << std::endl;
        }
      

      【讨论】:

        猜你喜欢
        • 2019-09-05
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 2019-03-02
        • 2012-08-05
        相关资源
        最近更新 更多