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 имя аргумента и 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.450463e+01 |   4.776e-01 |           5 |   9.060e-01 |           0 |
|     1000 |  8.034444e+01 |   4.776e-01 |           9 |   8.810e-01 |           0 |
|     1500 |  9.156276e+01 |   4.776e-01 |           2 |   8.867e-01 |           0 |
|     2000 |  8.027782e+01 |   2.817e-02 |           6 |   8.890e-01 |           0 |
|     2500 |  9.892440e+01 |   4.648e-01 |           2 |   8.904e-01 |           0 |

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

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

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

Figure contains 3 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 contains an object of type line.

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