Регрессия Гаусса с множественными выходами в scikit-learn - PullRequest
0 голосов
/ 05 мая 2018

Я использую scikit learn для операции регрессии по Гауссу (GPR) для прогнозирования данных. Мои данные о тренировках таковы:

x_train = np.array([[0,0],[2,2],[3,3]]) #2-D cartesian coordinate points

y_train = np.array([[200,250, 155],[321,345,210],[417,445,851]]) #observed output from three different datasources at respective input data points (x_train)

Контрольные точки (2-D), где необходимо прогнозировать среднее значение и дисперсию / стандартное отклонение:

xvalues = np.array([0,1,2,3])
yvalues = np.array([0,1,2,3])

x,y = np.meshgrid(xvalues,yvalues) #Total 16 locations (2-D)
positions = np.vstack([x.ravel(), y.ravel()]) 
x_test = (np.array(positions)).T

Теперь, после запуска подбора GPR (GausianProcessRegressor) (здесь продукт ConstantKernel и RBF используется в качестве ядра в GaussianProcessRegressor), среднее значение и отклонение / стандартное отклонение можно предсказать, следуя следующей строке кода:

y_pred_test, sigma = gp.predict(x_test, return_std =True)

При печати прогнозируемого среднего значения (y_pred_test) и дисперсии (sigma) в консоли выводится следующий вывод:

enter image description here

В прогнозируемых значениях (средних) печатается «вложенный массив» с тремя объектами внутри внутреннего массива. Можно предположить, что внутренние массивы являются прогнозируемыми средними значениями каждого источника данных в каждой точке расположения двухмерных контрольных точек. Однако напечатанная дисперсия содержит только один массив с 16 объектами (возможно, для 16 точек определения местоположения). Я знаю, что отклонение указывает на неопределенность оценки. Следовательно, я ожидал предсказанную дисперсию для каждого источника данных в каждой контрольной точке. Мои ожидания неверны? Как я могу получить прогнозируемую дисперсию для каждого источника данных в каждой контрольной точке? Это из-за неправильного кода?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Ну, вы действительно случайно натолкнулись на айсберг ...

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

Продолжая прелюдию, форма вашего sigma действительно соответствует ожидаемой в соответствии с scikit-learn docs для метода predict (т. Е. кодирование отсутствует ошибка в вашем случае):

Возвращает :

y_mean : массив, форма = (n_samples, [n_output_dims])

Среднее прогнозирующее распределение точек запроса

y_std : массив, форма = (n_samples,), необязательно

Стандартное отклонение прогнозирующего распределения в точках запроса. Возвращается только когда return_std равно True.

y_cov : массив, форма = (n_samples, n_samples), необязательно

Ковариация совместного прогнозного распределения точек запроса. Возвращается, только когда return_cov имеет значение True.

В сочетании с моим предыдущим замечанием о ковариационной матрице первым выбором будет вместо этого попробовать функцию predict с аргументом return_cov=True (поскольку запрос дисперсии для векторной переменной не имеет смысла ); но опять же, это приведет к матрице 16x16 вместо матрицы 3x3 (ожидаемая форма ковариационной матрицы для 3 выходных переменных) ...

Разъяснив эти детали, давайте перейдем к сути вопроса.


В основе вашей проблемы лежит нечто редко упоминаемое (или даже намекаемое) на практике и в соответствующих руководствах: регрессия гауссовского процесса с несколькими выходами весьма нетривиальна и все еще остается областью активных исследований , Возможно, scikit-learn действительно не может справиться с этим делом, несмотря на то, что на первый взгляд это так и происходит, без выдачи хотя бы некоторого соответствующего предупреждения.

Давайте посмотрим на подтверждение этого утверждения в недавней научной литературе:

Гауссовская регрессия процесса с несколькими переменными ответа (2015) - цитата (выделено мной):

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

Несмотря на высокое использование георадара для различных задач моделирования, существует все еще существуют некоторые нерешенные проблемы с методом георадара. из Особый интерес в этой статье является необходимость моделирования нескольких переменные ответа. Традиционно, одна переменная ответа рассматривается как гауссовский процесс, и несколько ответов моделируются независимо без учета их соотношения. Это прагматично и прямой подход был принят во многих приложениях (например, [7, 26, 27]), хотя это и не идеально. Ключ к моделированию мульти-ответа Гауссовские процессы - это формулировка ковариационной функции, которая описывает не только корреляцию между точками данных, но и корреляция между ответами.

Замечания о мульти-выходной регрессии гауссовского процесса (2018) - цитата (выделено в оригинале):

Типичные GP обычно предназначены для сценариев с одним выходом, в которых выход скаляр. Тем не менее, проблемы с несколькими выходами имеютвозникшие в различных областях, [...]. Предположим, что мы пытаемся аппроксимировать выходы T {f (t}, 1 ≤t ≤T), одна интуитивная идея состоит в том, чтобы использовать GP с одним выходом (SOGP), чтобы аппроксимировать их индивидуально, используя соответствующие обучающие данные D (t) = {X (t), y (t)}, см. рис. 1 (а). Учитывая, что выходные данные каким-то образом коррелированы, их индивидуальное моделирование может привести к потере ценной информации. Следовательно, все большее разнообразие инженерных приложений начинают об использовании многопоточного GP (MOGP), который концептуально изображен на рис. 1 (b), для суррогатного моделирования.

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

enter image description here

Физические ковариационные модели для гауссовских процессов с несколькими выходами (2013) - цитата:

Гауссов анализ процессов с несколькими выходами ограничено тем, что гораздо меньше хороших классов ковариации функции существуют по сравнению со скалярным (с одним выходом) случаем. [...]

Сложность поиска «хороших» ковариационных моделей для множественных Результаты могут иметь важные практические последствия. Неверный Структура ковариационной матрицы может значительно уменьшить эффективность процесса количественного определения неопределенности, а также Эффективность прогноза в выводах Кригинга [16]. Поэтому мы утверждаем, ковариационная модель может играть еще более важную роль в ко-кригинге [7, 17]. Этот аргумент применяется, когда ковариационная структура выводится из данных, как это обычно бывает.


Следовательно, как я уже сказал, мое понимание состоит в том, что sckit-learn действительно не в состоянии обрабатывать такие случаи, несмотря на то, что что-то подобное не упоминается или не намекается в документации (может быть интересно открыть актуальный вопрос на странице проекта). Похоже, что это вывод в этой соответствующей SO-теме , а также в этой CrossValidated ветке относительно панели инструментов GPML (Matlab).

Сказав это, помимо возврата к выбору простого моделирования каждого выходного сигнала отдельно (не является недопустимым выбором, если вы помните, что вы, возможно, выбрасываете полезную информацию из корреляции между вашими трехмерными выходными данными) элементы), существует по крайней мере один набор инструментов Python, который, по-видимому, способен моделировать GP с несколькими выходами, а именно документация runlmc ( paper , code , ).

0 голосов
/ 09 мая 2018

Прежде всего, если используемый параметр - «сигма», это относится к стандартному отклонению, а не к дисперсии (напомним, дисперсия - это просто квадрат стандартного отклонения).

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

В вашем случае у вас есть набор 2D точек. Если вы думаете о них как о точках на 2D-плоскости, то дисперсия - это просто расстояние от каждой точки до среднего. Стандартное отклонение, которое будет положительным корнем дисперсии.

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

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

В сторону: это также означает, что если вы измените набор путем вставки, удаления или замены, стандартное отклонение КАЖДОЙ точки изменится. Это потому, что среднее значение будет пересчитано для учета новых данных. Этот итеративный процесс является фундаментальной силой кластеризации k-средних.

...