hmcSampler

Гамильтониан Монте-Карло (HMC) семплер

Описание

пример

hmc = hmcSampler(logpdf,startpoint) создает гамильтоновый семплер Монте-Карло (HMC), возвращенный как 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 необходимо вернуть два выходных аргументов: [lpdf,glpdf] = logpdf(X). Здесь, lpdf - базовая логарифмическая плотность вероятностей (вплоть до аддитивной константы), glpdf - градиент плотности журнала и точки X - вектор-столбец с таким же количеством элементов, как и startpoint.

Входной параметр X на logpdf должен быть без ограничений, что означает, что каждый элемент X может быть любым вещественным числом. Преобразуйте любые ограниченные параметры выборки в переменные без ограничений перед использованием HMC-дискретизатора.

Если на 'UseNumericalGradient' значение установлено в true, затем logpdf не нужно возвращать градиент как второй выход. Использование численного градиента может быть проще, так как logpdf не нужно вычислять градиент, но это может сделать выборку медленнее.

Типы данных: function_handle

Начальная точка для начала выборки, заданная как числовой вектор-столбец.

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'VariableNames',{'Intercept','Beta'},'MassVectorTuningMethod','hessian' задает имена переменных выборки и метод настройки массовых векторов, который будет 'hessian'.

Размер шага гамильтоновой динамики, заданный как разделенная разделенными запятой парами, состоящая из 'StepSize' и положительная скалярная величина.

Чтобы предложить новое состояние для марковской цепи, HMC-дискретизатор интегрирует гамильтоновую динамику с помощью чехарды интегрирования. Этот аргумент управляет размером шага этой чехарды интегрирования.

Вы можете автоматически настроить размер шага, используя tuneSampler.

Пример: 'StepSize',0.2

Типы данных: single | double

Количество шагов гамильтоновой динамики, заданное как разделенная разделенными запятой парами, состоящая из 'NumSteps' и положительное целое число.

Чтобы предложить новое состояние для марковской цепи, HMC-дискретизатор интегрирует гамильтоновую динамику с помощью чехарды интегрирования. Этот аргумент контролирует количество шагов этой чехарды интегрирования.

Вы можете автоматически настроить количество шагов, используя tuneSampler.

Пример: 'NumSteps',20

Типы данных: single | double

Вектор масс переменных импульса, заданный как разделенная разделенными запятой парами, состоящая из 'MassVector' и числовой вектор-столбец с положительными значениями и той же длиной, что и startpoint.

«Массы» переменных импульса, связанных с интересующими переменными, управляют гамильтоновой динамикой в каждом предложении марковской цепи.

Можно автоматически настроить вектор масс с помощью tuneSampler.

Пример: 'MassVector',rand(3,1)

Типы данных: single | double

Метод для джиттерирования размера шага и количества шагов, заданный как разделенная разделенными запятой парами, состоящая из 'JitterMethod' и одно из следующих значений.

ЗначениеОписание
'jitter-both'

Случайным образом дрожит размер шага и количество шагов для каждой траектории чехарды.

'jitter-numsteps'

Джиттер только количество шагов каждой траектории чехарды.

'none'

Не выполнять дрожание.

При дрожании дискретизатор случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize' и 'NumSteps' значения. Используйте джиттеринг, чтобы улучшить стабильность чехарды интегрирования гамильтоновой динамики.

Пример: 'JitterMethod','jitter-both'

Метод настройки размера шага дискретизатора, заданный как разделенная разделенными запятой парами, состоящая из 'StepSizeTuningMethod' и 'dual-averaging' или 'none'.

Если на 'StepSizeTuningMethod' значение установлено в 'dual-averaging', затем tuneSampler настраивает размер шага чехарды HMC-дискретизатора, чтобы достичь определенного коэффициента принятия для фиксированного значения длины симуляции. Длина симуляции равна размеру шага, умноженному на количество шагов. Чтобы установить целевой коэффициент приемки, используйте 'TargetAcceptanceRatio' Аргумент пары "имя-значение" из tuneSampler способ.

Пример: 'StepSizeTuningMethod','none'

Метод настройки вектора массы дискретизатора, заданный как разделенная разделенными запятой парами, состоящая из 'MassVectorTuningMethod' и одно из следующих значений.

ЗначениеОписание
'iterative-sampling'

Настройка MassVector посредством последовательных приближений путем рисования выборок с помощью последовательности оценок векторов масс.

'hessian'

Установите MassVector равен отрицательной диагонали Гессиана logpdf на startpoint.

'none'

Настройку MassVector не выполняйте.

Для выполнения настройки используйте tuneSampler способ.

Пример: 'MassVectorTuningMethod','hessian'

Флаг для проверки аналитического градиента, заданный как разделенная разделенными запятой парами, состоящая из 'CheckGradient' и любой из них true (или 1) или false (или 0).

Если 'CheckGradient' является true, затем дискретизатор вычисляет численный градиент в startpoint и сравнивает его с аналитическим градиентом, возвращаемым logpdf.

Пример: 'CheckGradient',true

Имена переменных дискретизации, заданные как разделенная разделенными запятой парами, состоящая из 'VariableNames' и строковые массивы или массив ячеек из векторов символов. Элементы массива должны быть уникальными. Длина массива должна совпадать с длиной startpoint.

Поставьте 'VariableNames' значение для пометки компонентов вектора, который вы хотите выборки с помощью HMC sampler.

Пример: 'VariableNames',{'Intercept','Beta'}

Типы данных: string | cell

Флаг для использования числового градиента, заданный как разделенная разделенными запятой парами, состоящая из 'UseNumericalGradient' и любой из них true (или 1) или false (или 0).

Если вы задаете 'UseNumericalGradient' значение в true, затем HMC-дискретизатор численно оценивает градиент от плотности журнала, возвращенной logpdf. В этом случае logpdf функции не нужно возвращать градиент плотности журнала как второй выход. Использование численного градиента замедляет выборку HMC.

Пример: 'UseNumericalGradient',true

Выходные аргументы

свернуть все

Гамильтониан Монте-Карло сэмплер, вернулся в качестве HamiltonianSampler объект.

Введенный в R2017a
Для просмотра документации необходимо авторизоваться на сайте