主要内容

HMCSampler.

Hamiltonian Monte Carlo(HMC)采样器

描述

例子

hmc= hmcSampler (logpdf.起点创建一个汉密尔顿蒙特卡罗(HMC)采样器,返回汉密尔顿人寻找者对象。logpdf.是一个函数句柄,用于计算均衡分布及其梯度的概率密度的对数。列向量起点是开始HMC抽样的起始点。

创建采样器后,可以使用方法计算地图(最大-A-postiori)点估计,调整采样器,绘制样本和检查收敛诊断汉密尔顿人寻找者班级。有关此工作流程的示例,请参阅基于哈密顿蒙特卡罗的贝叶斯线性回归

hmc= hmcSampler (___名称,价值使用一个或多个名称值对参数指定其他选项。在所有其他输入参数后指定名称值对参数。

例子

全部收缩

建立一个哈密顿蒙特卡罗(HMC)采样器,从一个正态分布中采样。

首先,保存函数QuancleDistrad.在MATLAB®路径上,返回多元正常日志概率密度及其渐变(QuancleDistrad.在本例的最后定义)。然后,调用带参数的函数来定义logpdf.的输入参数HMCSampler.功能。

手段= [1; -3];standevs = [1; 2];logpdf = @(theta)normaldistgrad(θ,意味着,stablevs);

为HMC采样器选择一个起始点。

startpoint = Randn(2,1);

创建HMC采样器并显示其属性。

smp = hmcSampler (logpdf,曾经繁荣);
SMP.
smp = HamiltonianSampler with properties: StepSize: 0.1000 NumSteps: 50 MassVector: [2x1 double] JitterMethod: 'jitter-both' StepSizeTuningMethod: 'dual-averaging' MassVectorTuningMethod: ' iter- sampling' LogPDF: @(theta)normalDistGrad(theta,means,standevs) VariableNames: {2x1 cell} StartPoint: [2x1 double]

QuancleDistrad.函数返回均值为in的多元正态概率密度的对数和标准偏差Sigma.,指定为标量或列向量相同的长度起点.第二个输出参数是相应的梯度。

功能[lpdf,glpdf] = normalDistGrad(X,Mu,Sigma) Z = (X - Mu)./Sigma;lpdf =总和(日志(σ)- 5 *日志(2 *π)- 5 * (z ^ 2));glpdf = z /σ;结尾

输入参数

全部收缩

目标密度及其渐变的对数指定为函数手柄。

logpdf.必须返回两个输出参数:[lpdf, glpdf] = logpdf (X).这里,LPDF.基础-E日志概率密度(最多常数),glpdf是对数密度的梯度,和点X列向量的元素个数是否与列向量相同起点

输入参数Xlogpdf.必须是不受约束的,这意味着X可以是任何实数。在使用HMC采样器之前,将任何有约束的采样参数转换为无约束的变量。

如果是'usenumericalgradient'值设置为真的,然后logpdf.不需要返回梯度作为第二个输出。使用数值梯度可能更容易,因为logpdf.不需要计算梯度,但它可以使采样变慢。

数据类型:function_handle

开始抽样的初始点,指定为数字列向量。

数据类型:|双倍的

名称值对参数

指定可选的逗号分离对名称,价值论点。的名字是参数名称和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:VariableNames,{“拦截”,“Beta”},“MassVectorTuningMethod”、“海赛”指定采样变量名和质量矢量调优方法“海赛”

哈密顿动力学的步长,指定为逗号分隔对,由“StepSize”和正标量。

为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。这个参数控制跳跃式集成的步长。

您可以使用以下命令自动调整步长tuneSampler

例子:'STAPEIZE',0.2

数据类型:|双倍的

哈密顿动力学的步数,指定为逗号分隔对组成“NumSteps”和一个正整数。

为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。这个参数控制跳跃式集成的步骤数。

您可以使用自动调整步骤数tuneSampler

例子:“NumSteps”,20

数据类型:|双倍的

动量变量的质量矢量,指定为逗号分隔对组成“MassVector”一个正数的列向量和起点

与感兴趣的变量相关的“群众”的动量变量控制每个马尔可夫链提案中的哈密顿动态。

你可以自动调整质量矢量使用tuneSampler

例子:'MassVector',Rand(3,1)

数据类型:|双倍的

抖动步骤尺寸和步数的方法,指定为逗号分隔的对'jittermethod'和下列值之一。

价值 描述
“jitter-both”

随机抖动每个跳过轨迹的步长和步骤数。

“jitter-numsteps”

抖动只是每个跳跃轨迹的步数。

'没有任何'

没有抖动。

对于抖动,采样器随机选择步长或每个跳变轨迹的步数为小于的值“StepSize”“NumSteps”价值观。使用抖动来提高汉密尔顿动态的跨越式集成的稳定性。

例子:'jittermethod','抖动 - 两个'

调整采样器步长的方法,指定为包括的逗号分隔对“StepSizeTuningMethod”'双平均''没有任何'

如果是“StepSizeTuningMethod”值设置为'双平均',然后tuneSampler调整HMC采样器的跳变步长,以实现模拟长度固定值的一定接受比。模拟长度等于步长乘以步数。要设置目标验收率,请使用'targetacceptanceratio'的名称-值对参数tuneSampler方法。

例子:“StepSizeTuningMethod”、“没有”

调整采样器质量矢量的方法,指定为包括的逗号分隔对'massvectortuningmethod'和下列值之一。

价值 描述
'迭代 - 抽样'

调优MassVector.通过使用质量矢量估计序列绘制样本的连续逼近。

“海赛”

设定MassVector.等于负的对角线logpdf.起点

'没有任何'

没有调整MassVector.

要执行调优,请使用tuneSampler方法。

例子:'massvectortuningmethod','hessian'

用于检查分析梯度的标志,指定为逗号分隔的配对组成'检查机'和任何一种真的(或1) 或者错误的(或0)。

如果'检查机'真的,则采样器计算数值梯度在起点并将其与返回的解析梯度进行比较logpdf.

例子:'检查',真实

抽样变量名,指定为逗号分隔对,由“VariableNames”和字符串数组或字符向量的单元数组。数组的元素必须是唯一的。阵列的长度必须与长度相同起点

供应A.“VariableNames”使用HMC采样器标记要素样本的矢量组件的值。

例子:'variablenames',{'拦截','beta'}

数据类型:字符串|细胞

使用数字梯度的标志,指定为由逗号分隔的对组成'usenumericalgradient'和任何一种真的(或1) 或者错误的(或0)。

如果你设置'usenumericalgradient'价值真的,则HMC采样器根据返回的测井密度数值估计梯度logpdf..在这种情况下,logpdf.函数不需要返回日志密度的梯度作为第二个输出。使用数值梯度会使HMC采样变慢。

例子:“UseNumericalGradient”,真的

输出参数

全部收缩

哈密顿蒙特卡罗采样器,返回为汉密尔顿人寻找者对象。

介绍了R2017a