Гамильтонианский образец Монте-Карло (HMC)
создает гамильтоновский образец Монте-Карло (HMC), возвращаемый как hmc = hmcSampler(logpdf,startpoint)HamiltonianSampler объект. logpdf - дескриптор функции, который оценивает логарифм плотности вероятности равновесного распределения и его градиента. Вектор столбца startpoint - начальная точка, с которой начинается отбор проб HMC.
После создания образца можно вычислить оценки точек MAP (maximum-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 и отобразите его свойства.
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]
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 - плотность вероятности base-e log (до аддитивной константы), 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.
Поставка a 'VariableNames' значение для маркировки компонентов вектора, который требуется отсчитать, с помощью дискретизатора HMC.
Пример: '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.