3

如果我有一个我不知道其形式的函数 f(x) = y,并且如果我有一长串 x 和 y 值对(可能有数千个),那么是否有一个程序/包/库会产生 f(x) 的潜在形式吗?

显然,任何 f(x) 的可能形式都存在很多歧义,因此产生许多非平凡的唯一答案(以简化的形式)的东西是理想的,但可以产生至少一个答案的东西也很好。

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

4

6 回答 6

3

太好了,我找到了自己问题的答案。康奈尔大学发布了一款名为Eureqa的软件来进行这种盲试。它必须是我所见过的来自学术实验室的最精美的软件之一。这真的很漂亮。一探究竟:

在此处输入图像描述

它甚至与 Amazon 的 ec2 集群进行了交钥匙集成,因此您只需按一下按钮,就可以将一些繁重的计算工作从本地计算机转移到云上,而且费用非常合理。

我认为我将不得不学习更多关于 GUI 编程的知识,以便我可以窃取它的界面。

于 2012-05-18T20:38:10.660 回答
2

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

你想要做的叫做插值。两种非常简单(也不是很好)的方法是牛顿法拉普拉斯插值法。它们的工作原理相同,但实现方式不同(拉普拉斯是迭代的,牛顿是递归的)。

如果您的任何两个数据点之间没有太多的事情发生(即,实际函数没有任何“凸点”,其“峰值”未由您的数据点之一表示),那么插值的样条方法是一种您可以做出的最佳选择。实现起来有点困难,但它产生了很好的结果。

编辑:有时,根据您的具体问题,上述这些方法可能是矫枉过正。有时,您会发现线性插值(只需用直线连接点)是解决问题的完美解决方案。

于 2012-05-18T00:42:58.643 回答
0

It depends.

If you're using data acquired from the real-world, then statistical regression techniques can provide you with some tools to evaluate the best fit; if you have several hypothesis for the form of the function, you can use statistical regression to discover the "best" fit, though you may need to be careful about over-fitting a curve -- sometimes the best fit (highest correlation) for a specific dataset completely fails to work for future observations.

If, on the other hand, the data was generated something synthetically (say, you know they were generated by a polynomial), then you can use polynomial curve fitting methods that will give you the exact answer you need.

于 2012-05-18T00:32:22.637 回答
0

如果您有一个完全随机的集合,则多项式插值是可行的方法

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

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

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

请注意,您要实现的目标是许多机器学习算法的核心,因此您可能会在一些专门的库中找到您正在寻找的东西。

于 2012-05-18T00:41:57.943 回答
0

是的,有这样的事情。

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

如果你不知道函数应该是什么样子,你可以使用简单的样条或插值方案。

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

Wolfram Alpha 可以帮助您猜测:

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

于 2012-05-18T00:35:08.750 回答
0

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

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

一些列表还可能匹配其他函数类型,例如指数函数、正弦函数和许多其他函数类型。找到“最简单”的匹配函数是不可能的,但你能做的最好的事情是浏览一个常见的列表,如指数、正弦等,如果它们都不匹配,则对多项式进行插值。

不过,我不知道有任何软件可以为您做到这一点。

于 2012-05-18T00:53:37.043 回答