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

Для более сложных распределений вероятностей, вам могут потребоваться более продвинутые методы для генерации выборок, чем методы, описанные в Common Pseudorandom Number Generation Methods. Такие распределения возникают, например, в байесовском анализе данных и в больших комбинаторных задачах симуляции цепи Маркова Monte Carlo (MCMC). Альтернативой является построение марковской цепи со стационарным распределением, равным целевому дискретизирующему распределению, с использованием состояний цепи для генерации случайных чисел после начального периода горения, в котором распределение состояний сходится к цели.

Использование алгоритма Митрополиса-Гастингса

Алгоритм Metropolis-Hastings черпает выборки из распределения, которое известно только до константы. Случайные числа генерируются из распределения с функцией плотности вероятностей, которая равна или пропорциональна функции предложения.

Чтобы сгенерировать случайные числа:

  1. Примите начальное значение x (t).

  2. Нарисуйте выборку, y (t), из q распределения предложений (y | x (t)).

  3. Примите y (t) как следующую x выборки (t + 1) с r вероятностей (x (t), y (t)) и сохраните x (t) как следующую x выборки (t + 1) с вероятностью 1 - r (x (t), y (t)), где:

    r(x,y)=min{f(y)f(x)q(x|y)q(y|x),1}

  4. Увеличьте tt + 1 и повторите шаги 2 и 3, пока не получите желаемое количество выборок.

Сгенерируйте случайные числа с помощью метода Metropolis-Hastings с mhsample функция. Чтобы эффективно производить выборки с помощью алгоритма Metropolis-Hastings, очень важно выбрать хорошее распределение предложений. Если трудно найти эффективное распределение предложений, используйте выборку среза (slicesample) или гамильтониан Монте-Карло (hmcSampler) вместо этого.

Использование выборки среза

В образцах, когда трудно найти эффективное распределение предложений Metropolis-Hastings, алгоритм дискретизации срезов не требует явной спецификации. Алгоритм выборки среза черпает выборки из области под функцией плотности с помощью последовательности вертикальных и горизонтальных шагов. Во-первых, он выбирает высоту случайным образом от 0 до функции плотности f (x). Затем он выбирает новое значение x случайным образом путем выборки из горизонтального «среза» плотности выше выбранной высоты. Аналогичный алгоритм дискретизации среза используется для многомерного распределения.

Если задана функция f (x), пропорциональная функции плотности, то сделайте следующее, чтобы сгенерировать случайные числа:

  1. Примите начальное значение x (t) в области f (x).

  2. Нарисуйте действительное значение y равномерно из (0, f (x (t))), тем самым определив горизонтальный «срез» как S = {x: y < f (x)}.

  3. Найдите интервал I = (L, R) вокруг x (t), который содержит все или большую часть S «среза».

  4. Нарисуйте новую x точки (t + 1) в этом интервале.

  5. Увеличьте tt + 1 и повторите шаги 2-4, пока не получите желаемое количество выборок.

Выборка среза может сгенерировать случайные числа из распределения с произвольной формой функции плотности при условии, что доступна эффективная числовая процедура для нахождения интервала I = (L, R), который является «срезом» плотности.

Сгенерируйте случайные числа с помощью метода выборки среза с slicesample функция.

Использование гамильтонов Монте-Карло

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

Чтобы использовать отбор проб HMC, необходимо задать журнал f(x) (до аддитивной константы) и его градиент. Можно использовать численный градиент, но это приводит к более медленной выборке. Все переменные выборки должны быть без ограничений, что означает, что логарифмические f(x) и его градиент четко определены для всех реальных x. Чтобы выборка ограниченные переменные, преобразуйте эти переменные в без ограничений таковых перед использованием HMC-сэмплера.

Алгоритм квантования HMC вводит случайный «вектор импульса» z и определяет плотность z соединений и x «вектор положения» следующим P(x,z) = f(x)g(z). Цель состоит в том, чтобы выбрать из этого распределения соединений и затем игнорировать значения z - маргинальное распределение x имеет необходимую f(x) плотности.

Алгоритм HMC присваивает Гауссову плотность с ковариацией матричной M («большой матрицы»), чтобы z:

g(z)exp(12zTM1z)

Затем он задает «энергетическую функцию» как

E(x,z)=logf(x)+12zTM1z=U(x)+K(z)

с U(x) = - логарифмируйте f(x) «потенциальную энергию» и K (z) = zTM-1z/2 «кинетическая энергия». Плотность соединений определяется P(x,z) ∝ exp {-E(x,z) }.

Чтобы сгенерировать случайные выборки, алгоритм HMC:

  1. Принимает начальное значение x вектора положения.

  2. Генерирует выборку вектора импульса: z ∼ g(z).

  3. Развивает (x, z) состояния на некоторое количество фиктивного времени, τ к новому состоянию, (x’,z’) используя «уравнения движения»:

    dzdτ=Ux

    dxdτ=Kz

    Если бы уравнения движения могли быть решены точно, энергия (и, следовательно, плотность) оставалась бы постоянной: E(x,z) = E(x’,z’). На практике уравнения движений должны быть решены численно (обычно с использованием так называемой чехарды интегрирования) и энергия не сохранена.

  4. Принимает x’ как следующую выборку с вероятностью p acc = min (1, exp {E(x,z) – E(x’,z’)}), и сохраняет x как следующую выборку с вероятностью 1 - p acc.

  5. Повторяет шаги 2-4 до тех пор, пока не сгенерирует желаемое количество выборок.

Чтобы использовать выборку HMC, создайте дискретизатор, используя hmcSampler функция. После создания сэмплера можно вычислить оценки точек MAP (MAP-a-posteriori), настроить сэмплер, отобрать выборки и проверить диагностику сходимости. Пример этого рабочего процесса см. в Байесовской линейной регрессии с использованием гамильтонового Монте-Карло.

См. также

Функции

Для просмотра документации необходимо авторизоваться на сайте