Гамильтониан Монте-Карло (HMC) семплер
создает гамильтоновый семплер Монте-Карло (HMC), возвращенный как hmc
= hmcSampler(logpdf
,startpoint
)HamiltonianSampler
объект. logpdf
- указатель на функцию, который оценивает логарифм плотности вероятностей распределения равновесия и его градиента. Область вектора-столбца startpoint
является начальной точкой, с которой следует начать выборку HMC.
После того, как вы создаете сэмплер, можно вычислить оценки точек MAP (MAP (max-a-posteriori)), настроить сэмплер, нарисовать выборки и проверить диагностику сходимости с помощью методов HamiltonianSampler
класс. Пример этого рабочего процесса см. в Байесовской линейной регрессии с использованием гамильтонового Монте-Карло.
задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.hmc
= hmcSampler(___,Name,Value
)
Создайте гамильтоновый сэмплер Монте-Карло (HMC) для выборки из нормального распределения.
Во-первых, сохраните функцию normalDistGrad
на пути MATLAB ®, который возвращает многомерную нормальную логарифмическую плотность вероятностей и ее градиент (normalDistGrad
определяется в конце этого примера). Затем вызовите функцию с аргументами, чтобы задать logpdf
входной параметр в hmcSampler
функция.
means = [1;-3]; standevs = [1;2]; logpdf = @(theta)normalDistGrad(theta,means,standevs);
Выберите начальную точку для HMC-дискретизатора.
startpoint = randn(2,1);
Создайте HMC sampler и отобразите его свойства.
smp = hmcSampler(logpdf,startpoint);
smp
smp = HamiltonianSampler with properties: StepSize: 0.1000 NumSteps: 50 MassVector: [2x1 double] JitterMethod: 'jitter-both' StepSizeTuningMethod: 'dual-averaging' MassVectorTuningMethod: 'iterative-sampling' LogPDF: @(theta)normalDistGrad(theta,means,standevs) VariableNames: {2x1 cell} StartPoint: [2x1 double]
The 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
logpdf
- Логарифм целевой плотности и ее градиентаЛогарифм целевой плотности и ее градиента, заданный как указатель на функцию.
logpdf
необходимо вернуть два выходных аргументов: [lpdf,glpdf] = logpdf(X)
. Здесь, lpdf
- базовая логарифмическая плотность вероятностей (вплоть до аддитивной константы), glpdf
- градиент плотности журнала и точки X
- вектор-столбец с таким же количеством элементов, как и startpoint
.
Входной параметр X
на logpdf
должен быть без ограничений, что означает, что каждый элемент X
может быть любым вещественным числом. Преобразуйте любые ограниченные параметры выборки в переменные без ограничений перед использованием HMC-дискретизатора.
Если на 'UseNumericalGradient'
значение установлено в true
, затем logpdf
не нужно возвращать градиент как второй выход. Использование численного градиента может быть проще, так как logpdf
не нужно вычислять градиент, но это может сделать выборку медленнее.
Типы данных: function_handle
startpoint
- Начальная точка для начала отбора проб сНачальная точка для начала выборки, заданная как числовой вектор-столбец.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'VariableNames',{'Intercept','Beta'},'MassVectorTuningMethod','hessian'
задает имена переменных выборки и метод настройки массовых векторов, который будет 'hessian'
.'StepSize'
- Размер шага гамильтоновой динамики0.1
(по умолчанию) | положительная скалярная величинаРазмер шага гамильтоновой динамики, заданный как разделенная разделенными запятой парами, состоящая из 'StepSize'
и положительная скалярная величина.
Чтобы предложить новое состояние для марковской цепи, HMC-дискретизатор интегрирует гамильтоновую динамику с помощью чехарды интегрирования. Этот аргумент управляет размером шага этой чехарды интегрирования.
Вы можете автоматически настроить размер шага, используя tuneSampler
.
Пример: 'StepSize',0.2
Типы данных: single
| double
'NumSteps'
- Количество шагов гамильтоновой динамики50
(по умолчанию) | положительное целое числоКоличество шагов гамильтоновой динамики, заданное как разделенная разделенными запятой парами, состоящая из 'NumSteps'
и положительное целое число.
Чтобы предложить новое состояние для марковской цепи, HMC-дискретизатор интегрирует гамильтоновую динамику с помощью чехарды интегрирования. Этот аргумент контролирует количество шагов этой чехарды интегрирования.
Вы можете автоматически настроить количество шагов, используя tuneSampler
.
Пример: 'NumSteps',20
Типы данных: single
| double
'MassVector'
- Вектор масс переменных импульсаones(size(startpoint,1),1)
(по умолчанию) | числовой вектор-столбец Вектор масс переменных импульса, заданный как разделенная разделенными запятой парами, состоящая из 'MassVector'
и числовой вектор-столбец с положительными значениями и той же длиной, что и startpoint
.
«Массы» переменных импульса, связанных с интересующими переменными, управляют гамильтоновой динамикой в каждом предложении марковской цепи.
Можно автоматически настроить вектор масс с помощью tuneSampler
.
Пример: 'MassVector',rand(3,1)
Типы данных: single
| double
'JitterMethod'
- Способ дрожания размера шага и количества шагов'jitter-both'
(по умолчанию) | 'jitter-numsteps'
| 'none'
Метод для джиттерирования размера шага и количества шагов, заданный как разделенная разделенными запятой парами, состоящая из 'JitterMethod'
и одно из следующих значений.
Значение | Описание |
---|---|
'jitter-both' | Случайным образом дрожит размер шага и количество шагов для каждой траектории чехарды. |
'jitter-numsteps' | Джиттер только количество шагов каждой траектории чехарды. |
'none' | Не выполнять дрожание. |
При дрожании дискретизатор случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize'
и 'NumSteps'
значения. Используйте джиттеринг, чтобы улучшить стабильность чехарды интегрирования гамильтоновой динамики.
Пример: 'JitterMethod','jitter-both'
'StepSizeTuningMethod'
- Метод настройки размера шага селектора'dual-averaging'
(по умолчанию) | 'none'
Метод настройки размера шага дискретизатора, заданный как разделенная разделенными запятой парами, состоящая из 'StepSizeTuningMethod'
и 'dual-averaging'
или 'none'
.
Если на 'StepSizeTuningMethod'
значение установлено в 'dual-averaging'
, затем tuneSampler
настраивает размер шага чехарды HMC-дискретизатора, чтобы достичь определенного коэффициента принятия для фиксированного значения длины симуляции. Длина симуляции равна размеру шага, умноженному на количество шагов. Чтобы установить целевой коэффициент приемки, используйте 'TargetAcceptanceRatio'
Аргумент пары "имя-значение" из tuneSampler
способ.
Пример: 'StepSizeTuningMethod','none'
'MassVectorTuningMethod'
- Метод настройки вектора масс дискретизатора'iterative-sampling'
(по умолчанию) | 'hessian'
| 'none'
Метод настройки вектора массы дискретизатора, заданный как разделенная разделенными запятой парами, состоящая из 'MassVectorTuningMethod'
и одно из следующих значений.
Значение | Описание |
---|---|
'iterative-sampling' | Настройка |
'hessian' | Установите |
'none' | Настройку |
Для выполнения настройки используйте tuneSampler
способ.
Пример: 'MassVectorTuningMethod','hessian'
'CheckGradient'
- Флаг для проверки аналитического градиентаtrue
(или 1
) (по умолчанию) | false
(или 0
) Флаг для проверки аналитического градиента, заданный как разделенная разделенными запятой парами, состоящая из 'CheckGradient'
и любой из них true
(или 1
) или false
(или 0
).
Если 'CheckGradient'
является true
, затем дискретизатор вычисляет численный градиент в startpoint
и сравнивает его с аналитическим градиентом, возвращаемым logpdf
.
Пример: 'CheckGradient',true
'VariableNames'
- Имена переменных дискретизации{'x1','x2',...}
(по умолчанию) | строковый массив | массивов ячеек из векторов символов Имена переменных дискретизации, заданные как разделенная разделенными запятой парами, состоящая из 'VariableNames'
и строковые массивы или массив ячеек из векторов символов. Элементы массива должны быть уникальными. Длина массива должна совпадать с длиной startpoint
.
Поставьте 'VariableNames'
значение для пометки компонентов вектора, который вы хотите выборки с помощью HMC sampler.
Пример: 'VariableNames',{'Intercept','Beta'}
Типы данных: string
| cell
'UseNumericalGradient'
- Флаг для использования численного градиентаfalse
(или 0
) (по умолчанию) | true
(или 1
) Флаг для использования числового градиента, заданный как разделенная разделенными запятой парами, состоящая из 'UseNumericalGradient'
и любой из них true
(или 1
) или false
(или 0
).
Если вы задаете 'UseNumericalGradient'
значение в true
, затем HMC-дискретизатор численно оценивает градиент от плотности журнала, возвращенной logpdf
. В этом случае logpdf
функции не нужно возвращать градиент плотности журнала как второй выход. Использование численного градиента замедляет выборку HMC.
Пример: 'UseNumericalGradient',true
hmc
- Гамильтониан Монте-Карло семплерHamiltonianSampler
объект Гамильтониан Монте-Карло сэмплер, вернулся в качестве HamiltonianSampler
объект.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.