Машинное обучение на основе многомерного временного ряда – Как создать формат контролируемых данных

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

Вопрос 1:

У меня есть многомерный набор временных рядов. Для каждого временного шага есть 11 признаков и 1 выходное значение. Я собираюсь использовать контролируемое машинное обучение для прогнозирования выходного значения. Я понимаю, что в одновариантных случаях, если я собираюсь использовать данные за последние 3 дня для прогнозирования t-го дня, набор данных будет иметь формат

x(t-3) | x(t-2) | x(t-1) | x(t)

, где x(t) — это выходное значение, которое нужно предсказать. 

Как мне отформатировать набор данных, когда это многомерная задача?

Я видел, что в некоторых ядрах задача оформляется как

x12(t-3) | x12(t-2) | x12(t-1) | x1(t), x2(t), ..., x12(t)

, где x12(t) — это выходное значение, которое нужно предсказать. 

В этом случае переменные x1 до x11 за последние 3 дня игнорируются.

Тем не менее, эти переменные могут быть важны в моем случае. Могу ли я оформить задачу так:

x1(t-3),...,x12(t-3) | x1(t-2), ..., x12(t-2) | x1(t-1),..., x12(t-1) | x1(t), x2(t), ..., x12(t) 

?

(некоторые из признаков — это просто день, месяц, день недели и т. д., созданные на основе индекса времени)

Вопрос 2:

С только 11 признаками, необходимо ли проводить отбор признаков?

Что касается того, как справиться с задачей многомерного временного ряда, я считаю, что ссылка на GitHub Timeseries multivariate будет полезной.

Вам нужно изменить n_inputs и n_outputs на 12 и 1 соответственно.

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

Мы начинаем с набора данных $X$ с $N$ образцами, где каждый образец $F_x$ признаков, назовем $x_i \in \mathbb{R}^F$ и $i\in[0,N-1]$. Обратите внимание, что форма $X$$(N,F_x)$. У нас также есть $N$ целей, каждая из которых также может быть многомерной. Мы называем эти цели $Y$, с формой $(N,F_y)$. (обычно $F_y=1$)

Чтобы правильно отобрать признаки и цели из $X,Y$, сначала необходимо определить размер исторического образца и размер предсказания. Пусть $H$ обозначает размер истории, а $P$ — размер предсказания. Кортеж признаков и целей — это кортеж $(x,y)$, такой что форма $x$$(B,H,F_x)$, а форма $y$$(B,P,F_y)$.

Мы можем рассматривать $x$ как случайно отобранную партию из $H$ входных данных, каждая из которых имеет размер $F_x$, а $y$ как случайно отобранную партию из $P$ целей, каждая из которых имеет размер $F_y$

               пример окна

Используя PyTorch, можно реализовать пользовательский набор данных с помощью следующего (полу-псевдокода) метода __getitem__:

def __getitem__(self, idx: int) -> Tuple[torch.Tensor, torch.Tensor]:
    n_windows = N - H - P + 1
    win_idx = idx // n_windows
    features_window = features[win_idx: win_idx + H]
    target_window = targets[win_idx + H: win_idx + H + p]
    return features_window, target_window

Что касается вашего второго вопроса, количество признаков само по себе не решает вопрос о необходимости их отбора. Более подходящий вопрос — это взаимосвязь между этими признаками и есть ли корреляция, в результате которой возникает избыточность. Конечно, всегда можно попробовать и посмотреть результаты с разными наборами признаков.

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

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

Q1: Форматирование данных для многомерного временного ряда

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

Форматирование данных

Допустим, у вас есть матрица данных, где каждая временная метка имеет 11 функций (x1, x2, …, x11) и 1 целевую переменную (y):

  • Функции (Features): x1(t), x2(t), …, x11(t)
  • Целевая переменная (Target): y(t)

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

  1. Определите размер исторического окна (H): Например, мы хотим использовать данные за последние 3 дня (или 3 временных шага).

  2. Формирование выборок: Вы можете сформировать данные в виде:

x1(t-3), x2(t-3), ..., x11(t-3) |
x1(t-2), x2(t-2), ..., x11(t-2) |
x1(t-1), x2(t-1), ..., x11(t-1) |
y(t)

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

Пример кода на Python

Вот пример, как можно реализовать формирование данных с использованием библиотеки Pandas:

import pandas as pd

def create_supervised_data(df, n_steps):
    X, y = [], []
    for i in range(len(df) - n_steps):
        X.append(df.iloc[i:i+n_steps].values)  # Берем функции за последние n_steps
        y.append(df.iloc[i+n_steps].values[-1])  # Берем значение цели
    return np.array(X), np.array(y)

# Поход за набором данных с 11 функциями и 1 выходом
df = pd.DataFrame(data)  # Ваши данные как DataFrame
X, y = create_supervised_data(df, 3)  # Используем 3 временных шага

Q2: Необходимость выбора признаков

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

Рекомендации:

  1. Проведите анализ корреляции: Посмотрите, есть ли высоко коррелированные признаки и соответствует ли это вашим целям.
  2. Проверка с и без признаков: Попробуйте построить модели как с полным набором функций, так и с уменьшенной версией, исключая наиболее избыточные функции. Сравните метрики производительности.
  3. Используйте методы понижения размерности: Такие как PCA (метод главных компонент), чтобы уменьшить количество признаков, сохраняя при этом значимую информацию.

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

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

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