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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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

Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих NaN s или Inf s. При рисовании выборок ненулевое значение в столбце 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