(R - > R)函数的简单自动分类

时间:2009-12-08 13:06:46

标签: python algorithm function math

给定某些实时物理过程(例如网络流量)的数据值,找到“最多”与数据匹配的函数的名称。

我有一组y=f(t)类型的函数,其中yt是真实的:

funcs = set([cos, tan, exp, log])

和数据值列表:

vals = [59874.141, 192754.791, 342413.392, 1102604.284, 3299017.372]

从命令集中查找函数的最简单的方法是什么,它将生成非常相似的值?

PS:t从一些正值开始增加几乎相等的间隔

4 个答案:

答案 0 :(得分:2)

只需为集合的每个函数写入错误(例如,每个点的错误的二次和),并选择给出最小值的函数。

但在选择

之前,您仍然应该适合每个功能

答案 1 :(得分:1)

Scipy有functions来拟合数据,但它们使用多项式或样条函数。你可以使用Gauß'很多discoveries之一,least squares的方法来适应其他功能。

答案 2 :(得分:1)

我会尝试一种基于拟合的方法。对于四个测试函数中的每一个(f1-4见下文),a和b的值最小化平方误差。

f1(t) = a*cos(b*t)
f2(t) = a*tan(b*t)
f3(t) = a*exp(b*t)
f4(t) = a*log(b*t)

拟合后,四个函数的平方误差可用于评估拟合优度(低值意味着良好拟合)。

如果根本不允许拟合,则可以将四个函数分为两个不同的子组,重复函数(cos和tan)和严格增加函数(exp和log)。 通过检查所有给定值是否在整个测量间隔内增加,可以识别严格增加的功能。

在伪代码中,算法可以像

那样构造
if(vals are strictly increasing):
    % Exp or log
    if(increasing more rapidly at the end of the interval):
        % exp detected
    else:
        % log detected
else:
    % tan or cos
    if(large changes in vals over a short period is detected):
        % tan detected
    else:
        % cos detected

请注意,这种方法并不稳定,很容易导致错误的结论。

答案 3 :(得分:0)

请参阅Curve Fitting