如何从一组数据点插入单个 ("non-piecewise") 三次样条?
How to interpolate a single ("non-piecewise") cubic spline from a set of data points?
我希望根据一组数据点生成一个最适合这些点的三次样条函数。
也就是说,寻求获得最适合数据的 单个 三阶多项式函数 - 而不是分段多项式。
(最终目标是找到这个函数的二阶导数的最大值)
我试过scipy.interpolate.CubicSpline,但它似乎只允许生成分段三次样条。
是否有另一个函数或另一个库可以生成 单个 三次样条最适合给定数据点?
背景: 数据点来自称重传感器(重量传感器),代表两个物理物体相互接触。目的是拟合三次脊柱以进行数据平滑,然后计算二阶导数的最大值 - 为了找到它们接触的确切时刻 - 尽可能最好地使用给定的传感器。 (如果此方法有任何缺陷,欢迎评论)
原始数据:
从 scipi 生成的分段三次样条
期望的结果应该是这样的曲线:
可以用多项式回归来做这个,做多项式回归的核心概念是
- 根据您的特征创建多项式特征。例如。如果你有一个特征 x 你需要添加新的特征 x^2, x^3 等直到你想要的程度
- 现在您将使用新特征集训练线性回归模型
- 您还可以选择与您相关的成本函数,例如 RMSE、MAE 以及更多基于您想要优化以拟合曲线的函数
- 你也可以使用 l1 或 l2 之类的正则化来获得更平滑的函数
我找到了这个解释多项式回归的博客
https://towardsdatascience.com/machine-learning-polynomial-regression-with-python-5328e4e8a386
如果你真的想要一条三次抛物线,你可以使用numpy.polyfit
。
如果您需要的是连续的二阶导数,那么您确实需要三次样条,它不过是连续间隔(因此是分段)的三次方的集合,它们与二阶导数相匹配。
取决于您是想要插值(精确匹配数据点)还是拟合(即您的数据包含信号和一些噪声,而您想要提取前者),您是在 CubicSpline 之后,还是 splrep/BSpline
。
我希望根据一组数据点生成一个最适合这些点的三次样条函数。
也就是说,寻求获得最适合数据的 单个 三阶多项式函数 - 而不是分段多项式。 (最终目标是找到这个函数的二阶导数的最大值)
我试过scipy.interpolate.CubicSpline,但它似乎只允许生成分段三次样条。
是否有另一个函数或另一个库可以生成 单个 三次样条最适合给定数据点?
背景: 数据点来自称重传感器(重量传感器),代表两个物理物体相互接触。目的是拟合三次脊柱以进行数据平滑,然后计算二阶导数的最大值 - 为了找到它们接触的确切时刻 - 尽可能最好地使用给定的传感器。 (如果此方法有任何缺陷,欢迎评论)
原始数据:
可以用多项式回归来做这个,做多项式回归的核心概念是
- 根据您的特征创建多项式特征。例如。如果你有一个特征 x 你需要添加新的特征 x^2, x^3 等直到你想要的程度
- 现在您将使用新特征集训练线性回归模型
- 您还可以选择与您相关的成本函数,例如 RMSE、MAE 以及更多基于您想要优化以拟合曲线的函数
- 你也可以使用 l1 或 l2 之类的正则化来获得更平滑的函数
我找到了这个解释多项式回归的博客
https://towardsdatascience.com/machine-learning-polynomial-regression-with-python-5328e4e8a386
如果你真的想要一条三次抛物线,你可以使用numpy.polyfit
。
如果您需要的是连续的二阶导数,那么您确实需要三次样条,它不过是连续间隔(因此是分段)的三次方的集合,它们与二阶导数相匹配。
取决于您是想要插值(精确匹配数据点)还是拟合(即您的数据包含信号和一些噪声,而您想要提取前者),您是在 CubicSpline 之后,还是 splrep/BSpline
。