Вопрос или проблема
Я описываю здесь модель, чтобы показать, как соседи влияют на узел.
Я хочу реализовать её, чтобы попытаться прогнозировать значения, связанные с узлами;
я публикую это здесь, чтобы попросить совета по математической модели и методам машинного обучения, которые могли бы уже рассматривать подобный подход, но я о них не знаю, а также подсказок для их реализации (python).
Предположим, у вас есть квадратная 2D решетка (сетка из 9 квадратов для простоты), и:
- для каждого момента времени t
- от каждой ячейки в сетке
у вас есть векторы, указывающие к или от центрального квадрата.
Как в этом примере, в момент времени t1:
Я хочу “сопоставить” векторы с параметром, связанным с центральным квадратом.
Мне кажется, векторы можно моделировать как “матрицы X” (или семейство векторов), и полученное значение y, но на самом деле я испытываю затруднения с правильным формальным представлением этого.
Как в этом втором изображении:
Я хочу прогнозировать возможное значение y в будущем.
Мне кажется, я мог бы исследовать линейные или нелинейные модели, например, регрессии или прогнозирования, применяемые к временным рядам:
но я хочу обучаться на временных рядах векторов, а не на временных рядах значений y (надеюсь, это понятно).
Можете помочь предложить модели для изучения и возможные реализации (python), которые могли уже подходить к этой динамике?
Можете также предложить подход к обобщению на структуры многообразий (3D)?
Как примеры для обобщения, я думаю о:
- решетке в 3D (соседние кубы влияют на центральный куб);
- Y как векторы, а не скаляры (см. финальное изображение, чтобы понять, что я имею в виду), где результирующий вектор интерпретируется как результирующий вектор на следующем шаге в будущем t + 1.
Это действительно похоже на проблему формулировки вашей задачи. В вашем 2D примере вы можете разделить ваш $X_i$ по осям и сопоставить их, чтобы создать набор данных. Каждый $X_i$ имеет две компоненты: по оси 1 ($X_{i1}$) и 2 ($X_{i2}$).
В основном, вы просто создадите свой набор данных, сопоставляя 18 столбцов:
$X_{11}$, $X_{12}$, …, $X_{i1}$, $X_{i2}$, …, $X_{91}$, $X_{92}$
Чтобы попытаться предсказать ваше y.
Вы можете увеличивать размерность вашей задачи путем подобного сопоставления ваших признаков.
Это станет немного сложнее, если вы увеличите размерность y, так как вам потребуются несколько моделей.
Попытка предсказать $y_{t+1}$ приведет к другим рассмотрениям, например, к учету $y_t$ в качестве признака вашей модели.
.
Ответ или решение
Для решения задачи на тему "как подойти к картированию семейства векторов на решетке и прогнозированию итогового значения", представлено описание модели влияния соседей на центральный узел. Основная цель состоит в прогнозировании значений, связанных с узлами решетки.
Описание задачи
Имеется двумерная квадратная решетка (например, сетка из 9 квадратов), в которой для каждого момента времени ( t ) из каждой ячейки исходят векторы, направленные к центральному квадрату. Нам необходимо связать эти векторы с параметром, ассоциированным с центральным квадратом, для последующего прогнозирования.
Формализация проблемы
-
Формализация данных: Каждая ячейка решетки на каждом временном шаге ( t ) обладает вектором, который можно рассматривать как двумерную величину с компонентами вдоль осей ( X{i1} ) и ( X{i2} ). Объединяя все такие компоненты в один большой массив данных, получаем набор признаков для модели машинного обучения. Например, для решетки 3×3 мы формируем массив признаков из 18 элементов: ( X{11}, X{12}, \ldots, X{91}, X{92} ).
-
Предсказание ( y ): Ваша задача состоит в том, чтобы построить модель, которая на основе этого массива признаков прогнозировала значение, связанное с центральным квадратом, обозначенное как ( y ).
Подходы к прогнозированию и модели
-
Линейные и нелинейные модели: Как линейные, так и нелинейные модели, такие как регрессии или временные ряды (например, ARIMA), могут быть применены для прогнозирования. Однако, поскольку данные представляют собой временной ряд векторов (а не значений ( y )), возможно рассмотрение более сложных моделей.
-
Рекуррентные нейронные сети (RNN): Для обработки временных рядов векторов может быть полезно применение RNN или их более современных вариаций — LSTM (Long Short-Term Memory) или GRU (Gated Recurrent Unit). Эти модели способны учитывать временную зависимость.
Реализация в Python
В Python имеются библиотеки такие как TensorFlow и PyTorch, которые предоставляют мощные инструменты для работы с нейронными сетями и обработки временных рядов. Например:
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(64, input_shape=(timesteps, feature_count)))
model.add(Dense(1)) # Или больше, если Y - это вектор
model.compile(optimizer='adam', loss='mse')
# Обучение модели
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_val, y_val))
Обобщение на многомерные структуры
Для расширений в 3D, проблематика усложняется, так как каждый куб на решетке будет содержать трехмерные векторы и возможно более сложные зависимости.
-
Обобщение на 3D: Структура данных будет включать дополнительные оси, например, для описания 3D решетки можно ввести компоненты ( X_{i3} ). Нейронные сети 3D и CNN могут быть полезны для моделирования таких структур.
-
Векторные ( Y ): Если выходное значение является вектором, возможно использование нескольких выходных нейронов или даже отдельной модели для каждой компоненты.
Таким образом, с применением контекстуальных моделей машинного обучения и правильной формализацией данных, вы можете эффективно подойти к картированию семейства векторов и прогнозированию значений на основе их динамики.