如果我不知道f(x)= y的形式,我如何盲目拟合x,y值对列表?

时间:2012-05-18 00:27:13

标签: linear-algebra polynomial-math data-fitting

如果我有一个函数f(x)= y,我不知道它的形式,如果我有一长串的x和y值对(可能有数千个),是否有一个程序/包/库将生成潜在形式的f(x)?

显然,任何f(x)的可能形式都有很多模糊性,所以产生许多非平凡的独特答案(缩减的)会是理想的,但是可以产生至少一个答案的东西也是好。

如果x和y来自观测数据(即实验结果),是否有可以创建近似形式f(x)的程序?另一方面,如果您事先知道x和y之间存在完全确定的关系(如伪随机数生成器的输入和输出),那么程序是否可以创建f(x)的精确形式?

6 个答案:

答案 0 :(得分:3)

Soooo,我找到了自己问题的答案。康奈尔已经发布了一款软件,用于完成这种盲目拟合Eureqa。它必须是我见过的最优秀的软件之一,来自一个学术实验室。它非常漂亮。看看:

enter image description here

它甚至可以与亚马逊的ec2集群进行交钥匙整合,因此只需按一下按钮,您就可以将一些重大的计算提升从本地计算机卸载到云上,收取非常合理的费用。

我认为我将不得不更多地了解GUI编程,以便我可以窃取其界面。

答案 1 :(得分:2)

(这更像是一个数值方法的问题。)如果有某种可观察的模式(你可以看到这个函数),那么是的,有几种方法可以逼近原始函数,但它们将是只是,近似。

您要做的是插值。两种非常简单(并且不是很好)的方法是 Newton方法 Laplace的插值方法。它们都遵循相同的原则,但它们的实现方式不同(拉普拉斯是迭代的,牛顿是递归的,一个)。

如果你的任何两个数据点之间没有多少关系(即实际函数没有任何“凸起”,其“峰值”没有被你的一个数据点表示),那么{{3是你可以做出的最佳选择之一。它实现起来有点困难,但它会产生很好的结果。

修改:有时,根据您的具体问题,上述方法可能过度。有时候,你会发现线性插值(你只需用直线连接点)就可以很好地解决你的问题。

答案 2 :(得分:0)

取决于。

如果您使用的是从现实世界中获取的数据,那么统计regression techniques可以为您提供一些评估最佳匹配度的工具;如果你对函数的形式有几个假设,你可以使用统计回归来发现“最佳”拟合,尽管你可能需要注意过度拟合曲线 - 有时最合适(最高相关性)特定数据集完全无法用于未来的观察。

另一方面,如果数据是通过合成生成的(比如,你知道它们是由多项式生成的),那么你可以使用polynomial curve fitting methods来获得你需要的确切答案。

答案 3 :(得分:0)

是的,有这样的事情。

如果您绘制值并看到某些功能关系有意义,您可以使用最小二乘拟合来计算最小化误差的参数值。

如果您不知道该函数的外观,可以使用简单的样条或插值方案。

您还可以使用软件猜测功能应该是什么。也许像Maxima之类的东西可以提供帮助。

Wolfram Alpha可以帮助您猜测:

http://blog.wolframalpha.com/2011/05/17/plotting-functions-and-graphs-in-wolframalpha/

答案 4 :(得分:0)

如果你有一个完全随机的集

,那么

多项式插值就是你要走的路

http://en.wikipedia.org/wiki/Polynomial_interpolation

如果你的集几乎是线性的,那么回归会给你一个很好的近似值。

从X和Y创建精确的形式几乎是不可能的。

请注意,您尝试实现的目标是许多机器学习算法的核心,因此您可能会在某些专业库中找到所需内容。

答案 5 :(得分:0)

x / y值列表N项长度总是可以由度数N多项式生成(假设没有x值相同)。有关更多详细信息,请参阅此文章:

http://en.wikipedia.org/wiki/Polynomial_interpolation

某些列表也可能与其他函数类型匹配,例如指数,正弦和其他许多函数类型。找不到“最简单”的匹配函数是不可能的,但你能做的最好的就是查看常用的列表,如指数,正弦等,如果它们都不匹配,则插入多项式。

我不知道有任何软件可以为你做这件事。