Класс HamiltonianSampler

Суперклассы:

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

Описание

Сэмплер Гамильтонова Монте-Карло (HMC) является основанной на градиенте Цепью Маркова сэмплер Монте-Карло, который можно использовать, чтобы сгенерировать выборки от плотности вероятности P(x). Выборка HMC требует спецификации log P(x) и его градиента.

x вектора параметра должен быть неограничен, означая, что каждый элемент x может быть любым вещественным числом. К ограниченным параметрам выборки преобразуйте эти параметры в неограниченные переменные перед использованием сэмплера HMC.

После создания сэмплера можно вычислить MAP (максимум по опыту) точечные оценки, настроить сэмплер, чертить выборки и проверять диагностику сходимости с помощью методов этого класса. Для примера этого рабочего процесса смотрите, что Байесова Линейная регрессия Использует гамильтонов Монте-Карло.

Конструкция

hmc = hmcSampler(logpdf,startpoint) создает сэмплер Гамильтонова Монте-Карло (HMC), возвращенный как объект HamiltonianSampler. logpdf является указателем на функцию, который оценивает логарифм плотности вероятности распределения равновесия и его градиента. startpoint вектор-столбца является начальной точкой, с которой можно запустить выборку HMC.

hmc = hmcSampler(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.

Входные параметры

развернуть все

Логарифм целевой плотности и ее градиента, заданного как указатель на функцию.

logpdf должен возвратить два выходных аргумента: [lpdf,glpdf] = logpdf(X). Здесь, lpdf является основной-e логарифмической плотностью вероятности (до аддитивной постоянной), glpdf является градиентом логарифмической плотности и точкой, X является вектор-столбцом с тем же числом элементов как startpoint.

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

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

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

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

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

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

“Массы” переменных импульса, сопоставленных с переменными интереса, управляют гамильтоновой динамикой в каждом предложении по Цепи Маркова.

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

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

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

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

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

'jitter-numsteps'

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

'none'

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

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

Пример: '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.

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

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

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

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

Свойства

развернуть все

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

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

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

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

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

“Массы” переменных импульса, сопоставленных с переменными интереса, управляют гамильтоновой динамикой в каждом предложении по Цепи Маркова.

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

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

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

'jitter-numsteps'

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

'none'

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

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

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

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

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

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

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

'hessian'

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

'none'

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

Чтобы выполнить настройку, используйте метод tuneSampler.

Логарифм целевой плотности и ее градиента, заданного как указатель на функцию.

LogPDF возвращает два выходных аргумента: [lpdf,glpdf] = LogPDF(X). Здесь, lpdf является основной-e логарифмической плотностью вероятности (до аддитивной постоянной), и glpdf является градиентом логарифмической плотности в точке X. Входной параметр X должен быть вектор-столбцом с тем же числом элементов как свойство StartPoint.

Если вы устанавливаете значение 'UseNumericalGradient' к true при создании сэмплера, то LogPDF возвращает числовой градиент в glpdf.

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

Выборка имен переменных, заданных как массив ячеек уникальных векторов символов.

Методы

диагностикаЦепь Маркова диагностика Монте-Карло
drawSamplesСгенерируйте Цепь Маркова с помощью Гамильтонова Монте-Карло (HMC)
estimateMAPОцените максимум логарифмической плотности вероятности
tuneSampler Настройте сэмплер Гамильтонова Монте-Карло (HMC)

Примеры

свернуть все

Создайте сэмплер Гамильтонова Монте-Карло (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

Введенный в R2017a