Класс: 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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Burnin',500,'NumSamples',2000
генерирует Цепь Маркова путем отбрасывания 500 выборок выжигания дефектов и затем выборок рисунка 2000.'Burnin'
— Количество выборок выжигания дефектов, чтобы отбросить1000
(значение по умолчанию) | положительное целое числоКоличество выборок выжигания дефектов, чтобы отбросить с начала Цепи Маркова, заданной как положительное целое число.
Пример: 'Burnin',500
numSamples
Количество выборок, чтобы чертить1000
(значение по умолчанию) | положительное целое числоКоличество выборок, чтобы чертить от Цепи Маркова с помощью сэмплера HMC, заданного как положительное целое число.
Метод drawSamples
генерирует это количество выборок после электротермотренировки.
Пример: 'NumSamples',2000
'ThinSize'
— Размер утончения цепи Маркова1
(значение по умолчанию) | положительное целое числоРазмер утончения цепи Маркова, заданный как положительное целое число.
Только один из количества 'ThinSize'
выборок сохранен. Остальная часть выборок отбрасывается.
Пример: 'ThinSize',5
'StartPoint'
— Начальная точка, чтобы начать выбирать отsmp
.StartPoint
(значение по умолчанию) | числовой вектор-столбецНачальная точка, чтобы начать выбирать от, заданный как числовой вектор-столбец с тем же числом элементов как свойство StartPoint
сэмплера smp
.
Пример: 'StartPoint',randn(5,1)
'VerbosityLevel'
— Уровень многословия окна Command Window0
(значение по умолчанию) | положительное целое числоУровень многословия окна Command Window во время выборки, заданной как 0
или положительное целое число.
С набором значений к 0
drawSamples
не отображает деталей во время выборки.
С набором значений к положительному целому числу drawSamples
отображает детали выборки. Чтобы установить выходную частоту, используйте аргумент пары "имя-значение" 'NumPrint'
.
drawSamples
отображает вывод как таблицу с этими столбцами.
Заголовок | Описание |
---|---|
ITER | Номер итерации |
LOG PDF | Регистрируйте плотность вероятности в текущей итерации |
STEP SIZE | Опередите размер этапа интеграции в текущей итерации. Если размер шага дрожится, он может отличаться между итерациями. |
NUM STEPS | Количество этапов интеграции чехарды в текущей итерации. Если количество шагов дрожится, оно может отличаться между итерациями |
ACC RATIO | Приемное отношение, то есть, часть предложений, которые приняты. Приемное отношение вычисляется с начала выборки, включая электротермотренировку. |
DIVERGENT | Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих |
Пример: 'VerbosityLevel',1
'NumPrint'
— Verbose частота вывода100
(значение по умолчанию) | положительное целое числоМногословная выходная частота, заданная как положительное целое число.
Если значение '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.