В сегодняшнем упражнении по кодированию мы изучим более продвинутый и надежный метод Монте-Карло для подбора параметров модели, который также позволяет нам вычислять байесовские свидетельства модели и выполнять выбор модели. Ранее мы внедрили простой алгоритм MCMC Метрополиса-Гастингса, и я настоятельно рекомендую ознакомиться с связанной статьей в качестве учебника по методам Монте-Карло и байесовской структуре.

Вы можете найти прилагаемый Nested Sampling Python code on GitHub.

Прежде чем мы начнем, ниже показано, как выглядит запуск нашего алгоритма подбора модели:

Вложенная выборка

Алгоритм Nested Sampling расширяет идеи MCMC Metropolis-Hastings. В дополнение к получению апостериорных значений параметров модели, соответствующих набору данных, этот метод вычисляет байесовское свидетельство (Z) модели. Алгоритм берет свое начало из Джона Скиллинга (2004).

Мы обсуждали байесовскую структуру в алгоритме Метрополиса-Гастингса MCMC. Подводя итог, вспомним теорему Байеса:

где:

  • θ — набор параметров модели.
  • D — набор данных
  • H — модель («гипотеза»)
  • P(θ|D,H) — это апостериорное распределение параметров модели с учетом данных и модели.
  • P(θ|H) — это априорное распределение для параметров модели с учетом модели.
  • Z=P(D|H)являетсябайесовским доказательством

В стандартном алгоритме Метрополиса-Гастингса MCMC байесовское доказательство — это просто фактор нормализации, которым можно пренебречь. Однако здесь нас интересует его вычисление, что является сложной задачей, поскольку это многомерный интеграл, определяемый как среднее значение вероятности по сравнению с априорным:

К счастью, вложенная выборка дает нам решение для расчета этой важной величины.

Алгоритм создает фиксированное количество «живых» частиц, которые выбирают пространство параметров. Живые частицы изначально берутся из предыдущего распределения. На каждом шаге i=1..Mалгоритма выполните следующее:

  1. Найдите живую частицу с наименьшей вероятностью
  2. Замените эту частицу новой предложенной частицей с более высокой вероятностью, выбрав случайным образом другую живую частицу и применив к ней небольшое количество шагов MCMC. Повторяйте до тех пор, пока в процессе не будет выполнено фиксированное количество приемок (например, 10), чтобы гарантировать, что новая частица не коррелирует с живым образцом. На шаге MCMC принять предложенный набор параметров с вероятностью, равной отношению априорных
  3. Записывайте живые частицы, выброшенные из образца, их вероятности L_i и вес w_i=exp(-i/N_live)

В конце алгоритма рассчитайте байесовское свидетельство как:

Наш код делает именно это. В примере мы создаем 20 живых частиц, и для обновления частиц используется порог в 10 принятых шагов MCMC. Всего выполняется M=600 внешних итераций:

В приведенном выше коде мы добавили уточнение к шагу MCMC, чтобы сделать его адаптивным; мы обсудим это далее.

Добавление адаптивности к шагу предложения MCMC

Добавление адаптивности к шагу предложения в алгоритме MCMC помогает нам искать хорошие части пространства параметров за меньшее время. Под адаптивностью мы подразумеваем, что в начале алгоритма наши первоначальные предположения о параметрах модели могут быть далеки от хорошего соответствия данным, поэтому предложения MCMC по поиску лучших параметров выиграют от больших шагов. Однако на поздних этапах алгоритма, когда мы, по-видимому, отшлифовали близкое соответствие, мы хотели бы внести небольшие возмущения вокруг него, чтобы получить лучшую выборку вероятных совпадений. Мы хотели бы, чтобы уровень принятия предложений составлял около 50 %, поэтому мы адаптируем гауссову ширину σ распределения предложений в соответствии с:

Наличие процента принятия около 50% имеет смысл, потому что, если бы этот показатель был намного меньше, алгоритм тратил бы много усилий, отклоняя слишком много предложений, но мы также хотели бы получить какое-то отклонение, которое помогает лучше выбирать пространство. .

Повторная выборка апостериорного распределения

Чтобы получить апостериорное распределение параметров модели, нам необходимо выполнить этап постобработки. Мы просто передискретизируем живые частицы, которые были выброшены/собраны с помощью весов:

Это достигается с помощью функции random.choice numpy:

Выбор модели с использованием байесовских доказательств

Если две разные модели (гипотезы, H₁ и H₂, каждая со своим набором параметров) используются для подбора набора данных, сравнение их байесовских свидетельств (Z ) можно использовать, чтобы решить, предпочтительнее ли одна модель другой. Сравнение формально выполняется путем вычисления Байесовского коэффициента B:

где P(H₂)/P(H₁) — это априорное отношение вероятностей двух моделей, и во многих случаях, без дополнительной информации, оно может быть установлено равным 1.

Как правило, разница в моделях свидетельствует о:

  • |Δ log(Z)| ‹ 1 означает Неубедительные доказательства в пользу одной модели перед другой.
  • |Δ log(Z)| ~ 1 означает Слабое доказательство
  • |Δ log(Z)| ~ 3 означает Умеренное доказательство
  • |Δ log(Z)| › 5 означает Убедительные доказательства

(где «log» здесь — натуральный логарифм). Эту эвристику можно использовать, чтобы решить, имеют ли данные преимущество перед одной моделью над другой.

Вложенная выборка против Metropolis-Hastings MCMC

Nested Sampling имеет ряд преимуществ перед Metropolis-Hastings MCMC, в том числе:

✅ Несколько частиц одновременно исследуют пространство параметров

  • лучшее покрытие, более быстрая сходимость и меньше шансов застрять в локальном минимуме

✅ Расчет байесовского доказательства Z

  • позволяет количественно решить, какая модель лучше объясняет набор данных

✅ Четко определенная точка завершения

  • искать сходимость Z

Запуск кода позволяет вам визуализировать алгоритм вложенной выборки в реальном времени, поскольку он используется для подбора (фиктивного) набора данных измерений радиальной скорости экзопланеты. Это тот же набор данных, что и в нашем руководстве Metropolis-Hastings MCMC, где можно найти описание проблемы. Код строит модели, которые выбирают апостериорное распределение параметров, а также гистограммы окончательного апостериорного распределения вместе со значениями наземной истины (вертикальные красные линии). Мы видим, что алгоритм может довольно хорошо восстанавливать фактические значения, поскольку все красные линии находятся вблизи пиковых значений гистограммы. Кроме того, код отображает байесовское свидетельство модели на нижней панели по мере того, как оно вычисляется и обновляется на каждом этапе алгоритма.

Ниже приведена вложенная выборка в действии для набора данных радиальной скорости двух планет, который представляет собой гораздо большее пространство параметров для прохождения. Вложенная выборка довольно хорошо справляется с ориентацией на хорошее соответствие модели.

Загрузите Код Python на GitHub для нашего алгоритма вложенной выборки, чтобы визуализировать подбор параметров в режиме реального времени и, возможно, изменить его, чтобы применить к вашим собственным задачам моделирования. Наслаждаться!

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу