Гауссовская регрессия процесса: отображение входных данных во временные ряды - PullRequest
0 голосов
/ 23 февраля 2020

Во-первых, я хотел бы описать, чего я пытаюсь достичь: мой вход X состоит из 2 значений, а выход Y состоит из 2 списков различной длины:

list_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 4, 4, 8, 10, 11, 11, 11, 14, 14, 15, 15, 20, 20, 22, 22, 22, 22, 22, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 20, 22, 22, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 22, 22, 22, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
list_2 =[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 20, 20, 25, 25, 32, 33, 33, 33, 33, 33, 27, 27, 7, 7, 7, 7, 15, 15, 15, 22, 22, 22, 27, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

X= [-28,32] 
Y= [list_1,list_2] 

В большинстве случаев регрессия Проблема отображает вход х на один выход у. Однако в моем случае мне нужно отобразить вход x на временной ряд y. Я пытаюсь реализовать это в python с помощью gpflow. Мне бы хотелось узнать ваше мнение о том, подходит ли выбор георадара для этого случая, и если кто-то уже выполнил аналогичные задачи, не могли бы вы дать мне некоторое представление?

1 Ответ

0 голосов
/ 30 апреля 2020

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

ГП дает вам распределение по возможным функциям, обусловленное выборками из одной функции стохасти c. Если я правильно понимаю ваши настройки, у вас есть набор функций (временные ряды), и вы хотите узнать основную динамику этих функций при кондиционировании вашего X ([-28, 32]).

Давайте перефразируем ваши постановка задачи:

list_1 = [....]
list_2 = [....]
...

k = [-28, 32, ...]

X1 = np.arange(0, len(list_1))
Y1 = list_1

X2 = np.arange(0, len(list_2))
Y2 = list_2
...

В рамках GP я бы сказал, что вы хотите изучить ядро, которое зависит от вашего k. Затем, учитывая, что ядро, у вас есть стандартный GP, где x s являются временными индексами, а y=f(x)+noise являются значениями временных рядов. Для каждого k У вас есть некоторые тренировочные данные, к которым вы относитесь (например, (X1, Y1)), и вы хотите предсказать значения f (x) для некоторых других моментов времени (возможно, между вашим x или в будущем для прогнозирования).

Итак, вы могли бы попробовать что-то вроде DeepKernel, где нейронная сеть (или какая-то другая функция) предсказывает ядро, заданное k (см., Например, [1]). Вы можете обучить его, максимально увеличив предельную вероятность ваших тренировочных данных в gpflow. Возможно, есть и другие, более эффективные для данных методы изучения ядра, но вам придется исследовать это.

Кроме того, недавно я видел несколько статей о так называемых «нейронных процессах», где они имеют похожую настройку: https://github.com/deepmind/neural-processes Здесь процессы стохастии c предсказываются исключительно с помощью нейронных сетей, а не ГП.

Обратите внимание, однако, что оба метода, вероятно, потребуют довольно бит данных.

[1] Calandra, Roberto, et al. «Многообразие гауссовских процессов для регрессии». Международная совместная конференция по нейронным сетям 2016 (IJCNN). IEEE, 2016. https://arxiv.org/abs/1402.5876

...