Какой алгоритм можно использовать для уменьшения размерности нескольких временных рядов?

Вопрос или проблема

В моем наборе данных, точка данных по сути представляет собой временной ряд из 6 характеристик за год по месяцам, так что в итоге получается 6*12=72 характеристики. Мне нужно найти классовые выбросы, поэтому я выполняю сокращение размерности, надеясь, что разница в данных сохраняется, а затем применяю кластеризацию k-средних и вычисляю расстояние.

Для сокращения размерности я пробовал PCA и простой автокодировщик, чтобы уменьшить размерность с 72 до 6, но результаты неудовлетворительны.

Может кто-нибудь предложить другой способ уменьшения размерности данного типа данных.

Итак, чтобы прояснить, вы наблюдаете $N$ образцов с $P$ измерениями в $T$ моментах времени (где $P = 6$ и $T = 12$).

Сначала я бы определил, ожидаете ли вы, что совместное распределение ваших $P$ характеристик изменится со временем. Например, если эти характеристики $X$, то $\mathcal{P}(X) = \mathcal{P}(X | T)$ для всех значений $T$? Если да, вы могли бы сделать что-то вроде объединения ваших данных воедино по времени (так что у вас будет $NT$ образцов $P$ характеристик) и выполнить PCA, а затем использовать верхние $k$ нагрузок для вращения измерений в отдельных моментах времени, что оставит вам $N$ $k$-мерных временных рядов длиной $T$. Вы можете выбрать $k = 1$, если это необходимо, и использовать его для визуальной идентификации выбросов или установить простой порог. Если нет, вам стоит быть более осторожным с этой техникой – особенно если ковариация изменяется. Если изменяется дисперсия, но корреляция остается той же, возможно, некоторые процедуры могут быть выполнены (например, провести PCA на матрице корреляции/стандартизированных данных), и эта техника все равно сработает.

Какого типа выбросы вы ожидаете? Если это временное отклонение от остальной выборки (например, только в одно или два момента измерений), ваша техника PCA на объединенных данных не будет слишком чувствительной. Описанная мною техника будет более чувствительной.

Вы можете применить алгоритм выборки последовательных признаков (SFS). SFS – это семейство жадных алгоритмов поиска, которые используются для уменьшения начального d-мерного пространства признаков до k-мерного подпространства признаков, где k < d. Идея алгоритма заключается в выполнении любого классификационного алгоритма (параметр) на основе k_features (параметр). Он выберет те признаки, которые дают наивысшую точность для соответствующего алгоритма.

clf = svm.SVC()

# Шаги вперед для выборки признаков
sfs1 = sfs(clf,
           k_features=15,
           forward=True,
           floating=False,
           verbose=2,
           scoring='accuracy',
           cv=5)

# Выполнение SFFS
sfs1 = sfs1.fit(X_Train, Y_Train)

feat_cols = list(sfs1.k_feature_idx_)
print(feat_cols)

Одним из недостатков является то, что вам нужно зафиксировать желаемое количество характеристик, алгоритм скажет вам, какие характеристики лучше всего подходят с точки зрения точности. В вашем сценарии у вас 72 характеристики. Предположим, вы хотите использовать только 15 характеристик, но не знаете, какие из этих 72 характеристик. SFS скажет вам лучший выбор. Здесь, в приведенном выше коде, feat_cols – это список этих 15 характеристик.

Ответ или решение

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

1. PCA (Метод Главных Компонент)

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

2. t-SNE (t-распределение стохастического соседства)

t-SNE может быть полезен для визуализации данных в низкой размерности, особенно когда необходимо сохранить локальную структуру. Однако, его эффективность в кластеризации может быть ограничена.

3. UMAP (Унифицированный метод визуализации)

UMAP является отличной альтернативой t-SNE. Он сохраняет как локальную, так и глобальную структуру данных, что делает его более полезным для последующей кластеризации. Попробуйте использовать UMAP для снижения размерности ваших временных рядов перед применением метода кластеризации.

4. Autoencoders (Автоэнкодеры)

Вы упомянули, что применяли простые автоэнкодеры. Возможно, стоит попробовать более сложные архитектуры, такие как сверточные автоэнкодеры или вариационные автоэнкодеры (VAE). Это может помочь лучше захватить особенности данных.

5. Модели временных рядов

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

6. Feature Selection (Выбор признаков)

Алгоритмы, такие как Wrapper Sequential Feature Selection (SFS), могут помочь выбрать самые значимые 15 из 72 признаков. Хотя это не уменьшение размерности в классическом понимании, это всё же может помочь выделить важные аспекты данных для дальнейшего анализа.

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

7. Stacked PCA или разделение на группы

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

Заключение

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

Не забывайте оценивать качество отклонений и выбросов с использованием визуализации, чтобы получить представление о том, насколько хорошо работает выбранный метод.

Оцените материал
Добавить комментарий

Капча загружается...