Как отделить периодические данные от временных рядов?

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

В настоящее время я работаю над задачей классификации упражнений в спортзале на основе данных акселерометра. Я пытаюсь модульно извлечь окна, чтобы обучить свою модель на основе метрик в пределах окна (которое должно содержать одно полное движение конкретного упражнения). Я довольно нов в обработке данных и испытываю трудности с тем, как отделить периодические данные (выделенные красным) от остальных данных. Спасибоenter image description here

Первый подход — сглаживание с помощью скользящего среднего, что-то вроде:

df.rolling(50).mean()

Где 50 — это лаг, который нужно настроить.

Более сложный подход включает фильтрацию высокочастотных данных с помощью фильтра нижних частот. Возможно, вам стоит взглянуть на фильтры scipy.signal (butter?).

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

from statsmodels.tsa.seasonal import seasonal_decompose

С другой стороны, мне не ясно, каково ваше последующее применение. Это сильно влияет на тип подготовки данных, который ожидается. Марковские цепи? RNN?

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

.

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

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

Определение проблемы

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

Начальные шаги

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

import pandas as pd

# df — ваш DataFrame с данными акселерометра
smoothed_data = df.rolling(window=50).mean()

Параметр 50 в методе rolling определяет размер окна и должен быть экспериментально подобран для ваших конкретных данных.

Более сложные методы

1. Декомпозиция временного ряда

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

from statsmodels.tsa.seasonal import seasonal_decompose

# decomposition предполагает, что 'value_column' — это колонка с вашими данными
decomposition = seasonal_decompose(df['value_column'], model='additive', period=50)
decomposition.plot()

2. Частотный анализ на основе преобразования Фурье

Частотный анализ — один из способов выявить и отделить периодические компоненты. Метод преобразования Фурье позволяет преобразовать временной ряд в частотный домен и выделить частоты с максимальной мощностью.

import numpy as np
from scipy.fft import fft

# Применение быстрого преобразования Фурье
fft_values = fft(df['value_column'])

# Выделение доминирующих частот может помочь в определении периода данных

3. Фильтрация с использованием низкочастотных фильтров

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

from scipy.signal import butter, filtfilt

# Определение фильтра Баттеруорта
b, a = butter(N=4, Wn=0.1, btype='low', analog=False)
filtered_data = filtfilt(b, a, df['value_column'])

Заключение

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

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

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