Алгоритм поиска определенной характеристики в наборе данных - PullRequest
1 голос
/ 01 февраля 2012

В настоящее время я пытаюсь анализировать большие наборы данных (более 40 000 точек данных) с помощью Matlab. Эти наборы данных имеют высокую степень высокочастотного шума, однако, к счастью, шум имеет относительно небольшую амплитуду по сравнению с общим сигналом.

По сути, я хочу найти точку, в которой набор данных «запускается». Под подъемом я имею в виду, что его градиент значительно изменяется в небольшом регионе. Однако эти сигналы, которые я анализирую, страдают от «дрейфа», когда, до точки «подъема», наклон сигналов может иметь отрицательный, нейтральный или положительный характер, однако форма графика до и после «удара» Верхняя точка, как правило, одинакова.

Например: точка «поднять» будет выглядеть примерно так:

[1,25 2,5 3,75 5 7,5 12 21 36 49 64]

Очевидно, что это чрезвычайно упрощенная версия, но данные будут следовать кривой, подобной прямой линии (сначала 5 точек данных на рисунке выше), а затем они будут следовать более кривой экспоненциального типа (точка 6 и далее).

Итак, я смотрел на реализацию алгоритма обучения машинного типа, с помощью которого я мог бы сказать Matlab, где находится точка «подъема», а также «форма» данных, где возникает точка подъема, так что в будущем может точно найти точки «поднять».

Я относительно новичок как в Matlab, так и в машинном обучении (если машинное обучение - даже лучший способ решить мою проблему), и я понятия не имею, с чего мне начать. Я надеялся, что кто-то может указать мне правильное направление, будь то примеры кода Matlab и / или какая-нибудь теория для начинающих с реализацией кода.

1 Ответ

4 голосов
/ 01 февраля 2012

Я полагаю, что ML - это перебор в этой ситуации.Если данные находятся на прямой кривой, это означает, что их производная постоянна, что, в свою очередь, означает, что вторая равна нулю.Таким образом, рассчитайте приблизительную вторую производную, дважды использовав diff, и найдите, где она становится больше некоторого порога.Этот порог должен быть близок к нулю.

x = [ 1.25 2.5 3.75 5 7.5 12 21 36 49 64 ];
plot(diff(diff(x)));
...