2009-12-08 2 views
1

Указанные значения данных для некоторого физического процесса в реальном времени (например, сетевой трафик) должны найти имя функции, которая «в лучшем случае» соответствует данным.Простая автоматическая классификация функций (R -> R)

У меня есть набор функций типа y=f(t) где y и t реальны:

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

и список значений данных:

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

Зачем ставить простейший способ найти функция из заданного набора, которая будет генерировать очень похожие значения?

PS: t увеличивается, начиная с некоторого положительного значения почти-равными интервалами

+0

Является ли ваш набор функций ограниченными четырьмя перечисленными в вопросе (cos, tan, exp и log)? – midtiby

+0

нет, он может содержать другие функции вида y = f (t) – psihodelia

ответ

1

SciPy имеет functions для подгонки данных, но они используют polynomes или шлицы. Вы можете использовать один из Gauß 'many discoveries, метод least squares для соответствия другим функциям.

+0

нет, это не то, что мне нужно – psihodelia

+0

@psihodelia: Вам определенно нужно измерить, насколько близко каждая из ваших функций доходит до выходных значений. Почему бы не использовать для этого наименьшие квадраты? –

+0

Это то, что вам нужно. Интерполяция, экстраполяция и оценка параметров не могут быть вашими конечными целями, но они являются необходимыми шагами (или побочными продуктами) на пути к классификации. В конечном счете, вам нужно будет вычислить некоторое расстояние между вашими входными данными и наилучшим образом соответствовать. Категорией функции, которая минимизирует это расстояние, является ваш предсказанный ярлык класса.Но сначала вам нужно поместиться. –

0
+0

Нет, это не регрессионный анализ. Мне не нужны интерполяции, сглаживания или интегралов Фурье: мне нужна простая (по возможности) автоматическая классификация. – psihodelia

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 

Имейте в виду, что этот метод не является стабильным и что будет легко обмануть в неисправных выводов.

Смежные вопросы