drawSamples

Класс: HamiltonianSampler

Сгенерируйте Цепь Маркова с помощью Гамильтонова Монте-Карло (HMC)

Синтаксис

chain = drawSamples(smp)
[chain,endpoint,accratio] = drawSamples(smp)
[chain,endpoint,accratio] = drawSamples(___,Name,Value)

Описание

chain = drawSamples(smp) генерирует Цепь Маркова путем рисования выборок с помощью гамильтонова сэмплера Монте-Карло smp.

[chain,endpoint,accratio] = drawSamples(smp) также возвращает конечное состояние Цепи Маркова в endpoint и часть принятых предложений в accratio.

[chain,endpoint,accratio] = drawSamples(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.

Входные параметры

развернуть все

Гамильтонов сэмплер Монте-Карло, заданный как HamiltonianSampler объект.

drawSamples чертит выборки от целевой логарифмической плотности вероятности в smp.LogPDF. Используйте hmcSampler функция, чтобы создать сэмплер.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Burnin',500,'NumSamples',2000 генерирует Цепь Маркова путем отбрасывания 500 выборок выжигания дефектов и затем выборок рисунка 2000.

Количество выборок выжигания дефектов, чтобы отбросить с начала Цепи Маркова, заданной как положительное целое число.

Пример: 'Burnin',500

Количество выборок, чтобы чертить от Цепи Маркова с помощью сэмплера HMC, заданного как положительное целое число.

drawSamples метод генерирует это количество выборок после электротермотренировки.

Пример: 'NumSamples',2000

Размер утончения цепи Маркова, заданный как положительное целое число.

Только один из 'ThinSize' количество выборок сохранено. Остальная часть выборок отбрасывается.

Пример: 'ThinSize',5

Начальная точка, чтобы начать производить от, заданный как числовой вектор-столбец с тем же числом элементов как StartPoint свойство сэмплера smp.

Пример: 'StartPoint',randn(5,1)

Уровень многословия окна Command Window во время выборки, заданной как 0 или положительное целое число.

С набором значений к 0, drawSamples отображения никакие детали во время выборки.

С набором значений к положительному целому числу, drawSamples детали отображений выборки. Чтобы установить выходную частоту, используйте 'NumPrint' аргумент пары "имя-значение".

drawSamples отображает вывод как таблицу с этими столбцами.

ЗаголовокОписание
ITER

Номер итерации

LOG PDF

Регистрируйте плотность вероятности в текущей итерации

STEP SIZE

Опередите размер этапа интеграции в текущей итерации. Если размер шага дрожится, он может варьироваться между итерациями.

NUM STEPS

Количество этапов интеграции чехарды в текущей итерации. Если количество шагов дрожится, оно может варьироваться между итерациями

ACC RATIO

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

DIVERGENT

Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих NaNs или Infs. При рисовании выборок, ненулевого значения в DIVERGENT столбец указывает, что выбранный размер шага выше порога устойчивости для некоторой области пространства состояний. Чтобы устранить эту проблему, попытайтесь установить StepSize к меньшему значению чертите новые выборки и проверяйте что все значения в DIVERGENT столбец равный 0.

Пример: 'VerbosityLevel',1

Многословная выходная частота, заданная как положительное целое число.

Если 'VerbosityLevel' значение является положительным целым числом, затем drawSamples выходные параметры, производящие, детализируют каждый 'NumPrint' итерации.

Пример: 'NumPrint',200

Выходные аргументы

развернуть все

Цепь Маркова, сгенерированная с помощью гамильтонова Монте-Карло, возвращенного как числовая матрица.

Каждая строка chain выборка, и каждый столбец представляет одну переменную выборки.

Конечное состояние Цепи Маркова, возвращенной как числовой вектор-столбец той же длины как smp.StartPoint.

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

Примеры

развернуть все

Создайте цепи MCMC для многомерного нормального распределения с помощью сэмплера Гамильтонова Монте-Карло (HMC).

Задайте количество параметров к выборке и их средним значениям.

NumParams = 100;
means = randn(NumParams,1);
standevs = 0.1;

Во-первых, сохраните функциональный normalDistGrad на пути MATLAB®, который возвращает многомерную нормальную логарифмическую плотность вероятности и ее градиент (normalDistGrad задан в конце этого примера). Затем вызовите функцию с аргументами, чтобы задать logpdf входной параметр к hmcSampler функция.

logpdf = @(theta)normalDistGrad(theta,means,standevs);

Выберите начальную точку сэмплера. Создайте сэмплер HMC и настройте его параметры.

startpoint = randn(NumParams,1);
smp = hmcSampler(logpdf,startpoint);
smp = tuneSampler(smp);

Чертите выборки от следующей плотности, с помощью нескольких независимых цепей. Выберите отличающийся, случайным образом распределенные начальные точки для каждой цепи. Задайте количество выборок выжигания дефектов, чтобы отбросить с начала Цепи Маркова и количества выборок, чтобы сгенерировать после выжигания дефектов. Установите 'VerbosityLevel' распечатать детали во время выборки для первой цепи.

NumChains  = 4;
chains     = cell(NumChains,1);
Burnin     = 500;
NumSamples = 2000;
for c = 1:NumChains
    if c == 1
        showOutput = 1;
    else
        showOutput = 0;
    end
    chains{c} = drawSamples(smp,'Burnin',Burnin,'NumSamples',NumSamples,...
        'Start',randn(size(startpoint)),'VerbosityLevel',showOutput,'NumPrint',500);
end
|==================================================================================|
|   ITER   |    LOG PDF    |  STEP SIZE  |  NUM STEPS  |  ACC RATIO  |  DIVERGENT  |
|==================================================================================|
|      500 |  8.017202e+01 |   5.303e-01 |           4 |   8.820e-01 |           0 |
|     1000 |  7.756258e+01 |   5.303e-01 |           8 |   8.500e-01 |           0 |
|     1500 |  9.227175e+01 |   5.303e-01 |           2 |   8.547e-01 |           0 |
|     2000 |  8.073805e+01 |   3.128e-02 |           6 |   8.610e-01 |           0 |
|     2500 |  9.672952e+01 |   5.161e-01 |           2 |   8.600e-01 |           0 |

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

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

for p = 1:3
    subplot(3,1,p);
    plot(chains{1}(:,p));
    ylabel(smp.VariableNames(p))
    axis tight
end
xlabel('Iteration')

normalDistGrad функция возвращает логарифм многомерной нормальной плотности вероятности со средними значениями в Mu и стандартные отклонения в Sigma, заданный как скаляры или столбцы векторизовал ту же длину как startpoint. Вторым выходным аргументом является соответствующий градиент.

function [lpdf,glpdf] = normalDistGrad(X,Mu,Sigma)
Z = (X - Mu)./Sigma;
lpdf = sum(-log(Sigma) - .5*log(2*pi) - .5*(Z.^2));
glpdf = -Z./Sigma;
end

Советы

Введенный в R2017a