Гамильтониан Монте-Карло (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.