Процесс сравнения двух наборов данных - PullRequest
5 голосов
/ 21 июня 2011

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

enter image description here

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

Существуют ли какие-либо идеи, сценарии или функции, которые могут быть полезны для некоторой автоматизации этого процесса?

Ответы [ 2 ]

5 голосов
/ 21 июня 2011

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

Сказав это, вот что вы можете посмотреть:

  • корреляция двух наборов данных
  • разница производных наборов данных (но я не думаю, что это было бы достаточно надежно)
  • спектральный анализ, упомянутый @thron из трех
  • и т.д.. ...

Знание происхождения наборов данных и их изменчивости также может очень помочь в разработке достаточно надежных алгоритмов.

1 голос
/ 21 июня 2011

Конечно.Назовите два вектора A и B.

1) (Необязательно) Сгладьте данные либо с помощью простого усредняющего фильтра (Matlab 'smooth'), либо с помощью команды 'filter'.Это избавит от локальных изменений скорости («градиент»), которые, по-видимому, являются по существу шумом (как в восходящем компоненте красной трассы.

2) Различают и A, и B. Теперь вы непосредственно представляетескорость каждого вектора (Matlab 'diff').

3) Добавьте два дифференцированных вектора вместе (поэлементно).Назовите это C.

4) Найдите все точки в C, абсолютное значение которых выше определенного порогового значения (вам придется просмотреть данные, чтобы получить хорошее представление о том, что это должно быть).Точки выше этого порога указывают на очень похожую скорость.

5) Теперь найдите, где за высоким положительным значением в С следует высокое отрицательное значение, или наоборот.Между этими двумя точками у вас будут похожие кривые в A и B.

Примечание: a) Вы можете выполнить сглаживание после шага 3, а не после шага 1. b) Re 5), у вас может возникнуть ситуацияв котором «холм» в ваших данных находится на краю вектора и поэтому «разрезан пополам», и векторы опускаются до базовой линии, а затем поднимаются на следующем холме.Тогда 5) неверно идентифицирует холм как находящийся между начальным спуском и последующим подъемом.Чтобы избежать этого, вам также может потребоваться, чтобы точки в точках A и B между двумя точками сходства скоростей имели высокие абсолютные значения.

...