多项式曲线拟合

时间:2017-09-07 21:13:35

标签: regression model-fitting

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

你能分享任何资源(MATLAB / C ++),它可以提供一些如何在没有内置函数的情况下实现曲线拟合的帮助吗?我只能找到那些使用高斯消除的东西 - 与最小二乘拟合相同吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  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;
  }