estimateMAP

Класс: HamiltonianSampler

Оцените максимум логарифмической плотности вероятности

Синтаксис

xhat = estimateMAP(smp)
[xhat,fitinfo] = estimateMAP(smp)
[xhat,fitinfo] = estimateMAP(___,Name,Value)

Описание

xhat = estimateMAP(smp) возвращает максимум по опыту (MAP) оценка логарифмической плотности вероятности сэмплера Монте-Карло smp.

[xhat,fitinfo] = estimateMAP(smp) возвращает дополнительную подходящую информацию в fitinfo.

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

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

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

Гамильтонов сэмплер Монте-Карло, заданный как объект HamiltonianSampler.

estimateMAP оценивает максимум логарифмической плотности вероятности, заданной в smp.LogPDF.

Используйте функцию hmcSampler, чтобы создать сэмплер.

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

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

Пример: 'IterationLimit',100,'StepTolerance',1e-5 оценивает точку MAP с помощью предела итерации 100 и допуска сходимости размера шага 1e-5.

Начальная точка, чтобы запустить оптимизацию с, заданный как числовой вектор-столбец с тем же числом элементов как свойство StartPoint сэмплера smp.

Пример: 'StartPoint',randn(size(smp.StartPoint))

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

Пример: 'IterationLimit',100

Уровень многословия окна Command Window во время функциональной максимизации, заданной как 0 или положительное целое число.

  • С набором значений к 0 estimateMAP не отображает деталей об оптимизации.

  • С набором значений к положительному целому числу estimateMAP отображает информацию о сходимости в каждой итерации.

Информация о сходимости

ЗаголовокЗначение
FUN VALUEЗначение целевой функции.
NORM GRADНорма градиента целевой функции.
NORM STEPНорма итеративного шага, означая расстояние между предыдущей точкой и текущей точкой.
CURVOK означает, что слабое условие Вольфа удовлетворено. Это условие является комбинацией достаточного уменьшения целевой функции и условия искривления.
GAMMAСкалярное произведение времен шага различие в градиенте, разделенное на скалярное произведение различия в градиенте для себя. Различием в градиенте является градиент в текущей точке минус градиент в предыдущей точке. Дает диагностическую информацию об искривлении целевой функции.
ALPHAМножитель направления шага, который отличается от 1, когда алгоритм выполнил поиск строки.
ACCEPTYES означает, что алгоритм нашел, что приемлемый шаг взял.

Пример: 'VerbosityLevel',1

Относительный допуск сходимости градиента, заданный как положительная скалярная величина.

Позвольте tau = max(1,min(abs(f),infnormg0)), где f является текущим значением целевой функции, и infnormg0 является начальной нормой градиента. Если норма градиента целевой функции меньше, чем времена tau значение 'GradientTolerance', то максимизация, как рассматривается, сходилась к локальному оптимуму.

Пример: 'GradientTolerance',1e-4

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

Если предложенный размер шага меньше, чем значение 'StepTolerance', то максимизация, как рассматривается, сходилась к локальному оптимуму.

Пример: 'StepTolerance',1e-5

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

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

Точечная оценка MAP, возвращенная как числовой вектор, одного размера как smp.StartPoint.

Подходящая информация для вычисления MAP, возвращенного как структура с этими полями:

Поле

Описание

Iteration

Индексы итерации от 0 до итоговой итерации.

Objective

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

Gradient

Градиент отрицательной логарифмической плотности вероятности в итоговой итерации.

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

Примеры

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

Создайте гамильтонов сэмплер Монте-Карло для нормального распределения и оцените максимум по опыту (MAP) точка логарифмической плотности вероятности.

Во-первых, сохраните функциональный normalDistGrad на пути MATLAB®, который возвращает многомерную нормальную логарифмическую плотность вероятности, и ее градиент (normalDistGrad задан в конце этого примера). Затем вызовите функцию с аргументами, чтобы задать входной параметр logpdf к функции hmcSampler.

means = [1;-1];
standevs = [1;0.3];
logpdf = @(theta)normalDistGrad(theta,means,standevs);

Выберите отправную точку и создайте сэмплер HMC.

startpoint = zeros(2,1);
smp = hmcSampler(logpdf,startpoint);

Оцените точку MAP (точка, где плотность вероятности имеет свой максимум). Покажите больше информации во время оптимизации путем устанавливания значения 'VerbosityLevel' к 1.

[xhat,fitinfo] = estimateMAP(smp,'VerbosityLevel',1);
 o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|        0 |  6.689460e+00 |   1.111e+01 |   0.000e+00 |        |   9.000e-03 |   0.000e+00 |   YES  |
|        1 |  4.671622e+00 |   8.889e+00 |   2.008e-01 |    OK  |   9.006e-02 |   2.000e+00 |   YES  |
|        2 |  9.759850e-01 |   8.268e-01 |   8.215e-01 |    OK  |   9.027e-02 |   1.000e+00 |   YES  |
|        3 |  9.158025e-01 |   7.496e-01 |   7.748e-02 |    OK  |   5.910e-01 |   1.000e+00 |   YES  |
|        4 |  6.339508e-01 |   3.104e-02 |   7.472e-01 |    OK  |   9.796e-01 |   1.000e+00 |   YES  |
|        5 |  6.339043e-01 |   3.668e-05 |   3.762e-03 |    OK  |   9.599e-02 |   1.000e+00 |   YES  |
|        6 |  6.339043e-01 |   2.488e-08 |   3.333e-06 |    OK  |   9.015e-02 |   1.000e+00 |   YES  |

         Infinity norm of the final gradient = 2.488e-08
              Two norm of the final step     = 3.333e-06, TolX   = 1.000e-06
Relative infinity norm of the final gradient = 2.488e-08, TolFun = 1.000e-06
EXIT: Local minimum found.

Чтобы далее проверять, что оптимизация сходилась к локальному минимуму, постройте поле fitinfo.Objective. Это поле содержит значения отрицательной логарифмической плотности в каждой итерации функциональной оптимизации. Окончательные значения все очень похожи, таким образом, оптимизация сходилась.

fitinfo
fitinfo = struct with fields:
    Iteration: [7x1 double]
    Objective: [7x1 double]
     Gradient: [2x1 double]

plot(fitinfo.Iteration,fitinfo.Objective,'ro-');
xlabel('Iteration');
ylabel('Negative log density');

Отобразите оценку MAP. Это действительно равно переменной means, которая является точным максимумом.

xhat
xhat = 2×1

    1.0000
   -1.0000

means
means = 2×1

     1
    -1

Функция 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

Советы

  • Сначала создайте гамильтонов сэмплер Монте-Карло с помощью функции hmcSampler, и затем используйте estimateMAP, чтобы оценить точку MAP.

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

Алгоритмы

  • estimateMAP использует ограниченную память Бройден Флетчер Голдфарб Шэнно (LBFGS) оптимизатор квазиньютона, чтобы искать максимум логарифмической плотности вероятности. Смотрите Носедэла и Райта [1].

Ссылки

[1] Nocedal, J. и С. Дж. Райт. Числовая оптимизация, второй выпуск. Ряд Спрингера в исследовании операций, Springer Verlag, 2006.

Введенный в R2017a