Класс: 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
)
smp
— Гамильтонов сэмплер Монте-КарлоHamiltonianSampler
объект Гамильтонов сэмплер Монте-Карло, заданный как HamiltonianSampler
объект.
drawSamples
чертит выборки от целевой логарифмической плотности вероятности в smp.LogPDF
. Используйте hmcSampler
функция, чтобы создать сэмплер.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'Burnin',500,'NumSamples',2000
генерирует Цепь Маркова путем отбрасывания 500 выборок выжигания дефектов и затем выборок рисунка 2000.'Burnin'
— Количество выборок выжигания дефектов, чтобы отбросить
(значение по умолчанию) | положительное целое числоКоличество выборок выжигания дефектов, чтобы отбросить с начала Цепи Маркова, заданной как положительное целое число.
Пример: 'Burnin',500
'NumSamples'
— Количество выборок, чтобы чертить
(значение по умолчанию) | положительное целое числоКоличество выборок, чтобы чертить от Цепи Маркова с помощью сэмплера HMC, заданного как положительное целое число.
drawSamples
метод генерирует это количество выборок после электротермотренировки.
Пример: 'NumSamples',2000
'ThinSize'
— Размер утончения цепи Маркова
(значение по умолчанию) | положительное целое числоРазмер утончения цепи Маркова, заданный как положительное целое число.
Только один из 'ThinSize'
количество выборок сохранено. Остальная часть выборок отбрасывается.
Пример: 'ThinSize',5
'StartPoint'
— Начальная точка, чтобы начать производить отsmp
.StartPoint
(значение по умолчанию) | числовой вектор-столбецНачальная точка, чтобы начать производить от, заданный как числовой вектор-столбец с тем же числом элементов как StartPoint
свойство сэмплера smp
.
Пример: 'StartPoint',randn(5,1)
'VerbosityLevel'
— Уровень многословия окна Command Window
(значение по умолчанию) | положительное целое числоУровень многословия окна Command Window во время выборки, заданной как 0
или положительное целое число.
С набором значений к 0
, drawSamples
отображения никакие детали во время выборки.
С набором значений к положительному целому числу, drawSamples
детали отображений выборки. Чтобы установить выходную частоту, используйте 'NumPrint'
аргумент пары "имя-значение".
drawSamples
отображает вывод как таблицу с этими столбцами.
Заголовок | Описание |
---|---|
ITER | Номер итерации |
LOG PDF | Регистрируйте плотность вероятности в текущей итерации |
STEP SIZE | Опередите размер этапа интеграции в текущей итерации. Если размер шага дрожится, он может варьироваться между итерациями. |
NUM STEPS | Количество этапов интеграции чехарды в текущей итерации. Если количество шагов дрожится, оно может варьироваться между итерациями |
ACC RATIO | Приемное отношение, то есть, часть предложений, которые приняты. Приемное отношение вычисляется с начала выборки, включая электротермотренировку. |
DIVERGENT | Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих |
Пример: 'VerbosityLevel',1
'NumPrint'
— Многословная выходная частота
(значение по умолчанию) | положительное целое числоМногословная выходная частота, заданная как положительное целое число.
Если 'VerbosityLevel'
значение является положительным целым числом, затем drawSamples
выходные параметры, производящие, детализируют каждый 'NumPrint'
итерации.
Пример: 'NumPrint',200
chain
— Цепь Маркова, сгенерированная с помощью гамильтонова Монте-КарлоЦепь Маркова, сгенерированная с помощью гамильтонова Монте-Карло, возвращенного как числовая матрица.
Каждая строка chain
выборка, и каждый столбец представляет одну переменную выборки.
endpoint
— Конечное состояние Цепи МарковаКонечное состояние Цепи Маркова, возвращенной как числовой вектор-столбец той же длины как smp.StartPoint
.
accratio
— Приемное отношениеПриемное отношение предложений по Цепи Маркова, возвращенных в виде числа. Приемное отношение вычисляется с начала выборки, включая электротермотренировку.
Создайте цепи 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
После создания сэмплера HMC с помощью hmcSampler
функция, можно вычислить MAP (максимум по опыту) точечные оценки, настроить сэмплер, чертить выборки и проверять диагностику сходимости с помощью методов HamiltonianSampler
класс. Для примера этого рабочего процесса смотрите, что Байесова Линейная регрессия Использует гамильтонов Монте-Карло.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.