Я узнал о регрессии гауссовского процесса из онлайн-видео и заметок к лекциям, и я понимаю, что если у нас есть набор данных с точками, то мы предполагаем, что данные взяты из n- мерного многомерного гауссиана. Таким образом, мой вопрос в том случае, если n равно 10 из миллионов, регрессия гауссовского процесса все еще работает? Разве матрица ядра не будет огромной, что сделает процесс совершенно неэффективным? Если да, существуют ли методы для решения этой проблемы, например, многократная выборка из набора данных? Какие есть хорошие методы для решения таких случаев?
10
Ответы:
Существует широкий спектр подходов для масштабирования GP для больших наборов данных, например:
Подходы с низким рангом: они пытаются создать приближение с низким рангом к ковариационной матрице. Наиболее известным из них является метод Нистрома, который проецирует данные на подмножество точек. На основе этого были разработаны FITC и PITC, в которых используются псевдоточки, а не наблюдаемые точки. Они включены, например, в библиотеку GPy python. Другие подходы включают случайные функции Фурье.
H-матрицы : они используют иерархическое структурирование ковариационной матрицы и применяют приближения низкого ранга к каждой подматрице структур. Это реже применяется в популярных библиотеках.
Методы Кронекера : они используют продукты Кронекера ковариационных матриц, чтобы ускорить вычислительное узкое место.
Машины Байесовского комитета : это включает в себя разбиение ваших данных на подмножества и моделирование каждого с помощью GP. Затем вы можете объединить прогнозы, используя оптимальную байесовскую комбинацию выходов. Это довольно легко реализовать самостоятельно и быстро, но вроде как ломает ваше ядро, если вы заботитесь об этом - статья Марка Дайзенрота должна быть достаточно легкой, чтобы следовать здесь .
источник
Обычно вы можете обучать гауссовские процессы на подвыборках вашего набора данных (пакетирование). Bagging реализован в sk learn и может быть легко использован. Посмотрите на пример документации .
Помимо методов пакетирования, существует несколько активных исследований о том, как сделать масштабируемые регрессии гауссовского процесса. СтатьяO ( n )
источник
Ты спросил:
Не в стандартном смысле построения и обращения большой матрицы. У вас есть два варианта: 1) выбрать другую модель или 2) сделать приближение.
1) Некоторые модели, основанные на GP, можно масштабировать до очень больших наборов данных, таких как машина байесовского комитета, связанная в ответе выше. Однако я нахожу этот подход довольно неудовлетворительным: есть веские причины для выбора модели GP, и если мы хотим перейти к более вычислимой модели, мы можем не сохранить свойства исходной модели. Например, прогнозируемые отклонения BCM сильно зависят от разделения данных.
2) «Классический» подход к аппроксимации в GP состоит в аппроксимации матрицы ядра. Вот хороший обзор этих методов здесь: http://www.jmlr.org/papers/volume6/quinonero-candela05a/quinonero-candela05a.pdf . Фактически, мы обычно можем рассматривать эти матричные аппроксимации как модельные аппроксимации и объединять их с машиной байесовского комитета: это изменения в модели, и может быть трудно понять, когда эти изменения могут быть патологическими. Вот супер обзор: https://papers.nips.cc/paper/6477-understanding-probabilistic-sparse-gaussian-process-approximations.pdf
Способ, которым я рекомендую делать аппроксимации для больших ВО, состоит в том, чтобы избегать аппроксимации матрицы ядра или модели и приближать апостериорное распределение с помощью вариационного вывода. Многие вычисления выглядят как матричное приближение «низкого ранга», но есть одно очень желательное свойство: чем больше вычислений вы используете (тем больше «рангов»), тем ближе аппроксимация к истинному апостериорному, как измеряется KL дивергенция.
Эти статьи являются хорошей отправной точкой: http://proceedings.mlr.press/v5/titsias09a/titsias09a.pdf https://arxiv.org/pdf/1309.6835
Я написал более длинную статью по тому же аргументу здесь: https://www.prowler.io/blog/sparse-gps-approximate-the-posterior-not-the-model
На практике вариационное приближение работает очень хорошо во многих случаях. Я широко использовал его в реальных приложениях. И совсем недавно появилась замечательная теория, подтверждающая, почему она должна работать ( https://arxiv.org/abs/1903.03571 ).
Последний плагин: вариационный вывод в GP реализуется в gpflow ( https://github.com/GPflow/GPflow )
источник