Алгоритм нормализации данных временных рядов в реальном времени?

12

Я работаю над алгоритмом, который берет вектор самой последней точки данных из ряда потоков датчиков и сравнивает евклидово расстояние с предыдущими векторами. Проблема заключается в том, что разные потоки данных поступают от совершенно разных датчиков, поэтому простое евклидово расстояние резко переоценит некоторые значения. Понятно, что мне нужен какой-то способ нормализации данных. Однако, поскольку алгоритм предназначен для работы в режиме реального времени, я не могу использовать какую-либо информацию о каком-либо потоке данных в целом при нормализации. До сих пор я только отслеживал наибольшее значение, видимое для каждого датчика на этапе запуска (первые 500 векторов данных), а затем делил все будущие данные с этого датчика на это значение. Это работает на удивление хорошо, но чувствует себя очень не изящно.

Мне не очень повезло найти уже существующий алгоритм для этого, но, возможно, я просто не смотрю в нужных местах. Кто-нибудь знает об этом? Или есть идеи? Я видел одно предложение использовать скользящее среднее (вероятно, рассчитанное по алгоритму Уэлфорда), но если бы я это сделал, то несколько показаний одного и того же значения не были бы одинаковыми, что кажется довольно большой проблемой, если только я Я что-то упустил. Любые мысли приветствуются! Благодарность!

seaotternerd
источник

Ответы:

1

Из вашего вопроса я понимаю, что вы ищете:

  1. Найдите способ, который нормализует вклад данных от каждого датчика.
  2. Посмотрите, отличается ли новая точка данных от предыдущих точек.

Здесь я бы начал

1. Для вашего первого вопроса: удаление среднего и отбеливание - это то, что вы ищете. Отбеливающее преобразование гарантирует, что все ваши функции находятся в одном динамическом диапазоне.

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

Предполагая, что ваши данные являются одномодальными, что они имеют одно выраженное среднее значение. Я бы начал с вычитания среднего значения данных и выполнения отбеливающего преобразования (возможно, PCA, возможно, ZCA в зависимости от ваших данных)

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

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

2. Чтобы эффективно измерить расстояние от прошлых точек, я бы использовал расстояние Махаланобиса . В действительности, расстояние Махаланобиса - это в значительной степени евклидово расстояние в отбеленном пространстве.

В заключение, пожалуйста, прочитайте о отбеливании и расстоянии Махаланобиса, я думаю, это укажет вам направление, которое вы ищете.

rhadar
источник