大规模数据,插值

1 投票
4 回答
3496 浏览
提问于 2025-04-16 11:57

我在寻找一种“方法”来得到一个公式,这个公式是通过拟合一组数据(3000个点)得到的。我之前使用了勒让德多项式,但当数据点超过20个时,它给出的值不太准确。我可以写一个卡方检验,但这个算法计算N个参数需要花费很多时间,而且一开始我并不知道这个函数的具体形状,所以需要花费更多时间。我在考虑使用样条插值……也许……

所以输入是:3000个点

输出:f(x) = ... 某种东西

我想通过拟合得到一个公式。在Python中,最好的方法是什么呢?

愿力量与你同在!

4 个回答

0

你可以随机抽取一些你观察到的数据点,然后给这些点拟合一个三次样条曲线(如果你多次重复这个过程,就能得到一系列的样条曲线)。给3000个点拟合样条曲线有点多,但通过对样本生成样条曲线的分布,可以帮助你了解这个函数大概是什么样子的。正如Josh上面提到的,http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html 是一个很好的起点,适合你开始查找相关信息。

3

首先,样条曲线并不会给你一个“公式”,至少在你没有能力处理所有的分段时是这样的。即使你能处理,这个公式也不会简单易写,或者说出来的结果也不会好看。

简单的样条曲线会给你一个插值函数。更糟糕的是,如果你有3000个点,插值样条曲线大约会生成那么多的三次段!你之前提到过插值。其实,像这样的高阶插值多项式效果也不会好,所以别指望能回到那种方法。

如果你只需要一个工具,能在任何点提供精确的插值,而不需要一个明确的公式,那么插值样条曲线是个不错的选择。

或者你真的想要一个近似函数吗?一个能大致符合你数据的函数,能平滑掉一些噪声?事实上,很多时候那些对这方面一无所知的人说“插值”,其实他们真正想要的是近似和平滑。这当然是可以做到的,但关于曲线拟合和经验数据建模的书籍可多了。你首先要做的就是选择一个合适的模型,来表示这些数据。如果你能根据对研究关系的物理理解,选择一个聪明的模型,那就最好了。然后你可以用非线性回归的方法来估计这个模型的参数,这方面的方法有很多。

如果你没有模型,也不愿意选择一个大致合适的模型,那你就只能使用样条曲线这种通用模型,或者高阶多项式模型,而我对这些模型并不太看好。

我想说的是,你需要做出一些选择,并对模型的选择进行一些研究。

3

你可以试试多项式拟合:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

或者其他一些插值方法:

http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html

不过,要推荐一个合适的方法,得先了解一下你的数据集,以及你对拟合效果的要求。

撰写回答