主要内容

HamiltonianSampler类

哈密顿蒙特卡罗采样器

描述

哈密顿蒙特卡罗(HMC)采样器是一种基于梯度的马尔可夫链蒙特卡罗采样器,您可以使用它从概率密度生成样本P (x).HMC采样需要规范日志P (x)及其梯度。

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

创建采样器后,可以使用此类方法计算MAP(最大后验概率)点估计、调整采样器、绘制样本和检查收敛诊断。有关此工作流的示例,请参见基于哈密顿蒙特卡罗的贝叶斯线性回归

建设

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

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

输入参数

全部展开

目标密度及其梯度的对数,指定为函数句柄。

logpdf必须返回两个输出参数:[lpdf,glpdf] = logpdf(x).在这里,LPDF.为以e为底的对数概率密度(直到一个附加常数),GLPDF.是日志密度的渐变,以及点X列向量的元素个数是否与列向量相同起点

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

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

数据类型:function_handle.

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

数据类型:|

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:'variablenames',{'拦截','beta'},'massvectortuningmethod','hessian'指定采样变量名和质量矢量调优方法'赫索安'

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

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

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

例子:'stepsize',0.2

汉密尔顿语动态的步数,指定为逗号分隔的对组成'numsteps'一个正整数。

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

您可以使用自动调优步骤数TUNESAMPLER.

例子:'numsteps',20

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

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

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

例子:“MassVector”,兰德(3,1)

用于抖动步长和步数的方法,指定为由逗号分隔的对组成“JitterMethod”以及以下之一:

价值 描述
“jitter-both”

随机抖动步长和步数为每个跳变轨迹。

'抖动 - numsteps'

抖动只有每个LeapFrog轨迹的步数。

'没有任何'

执行不抖动。

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

例子:“JitterMethod”、“jitter-both”

用于调整采样器步长的方法,指定为由逗号分隔的对组成'stemizezezeiningmethod'“dual-averaging”'没有任何'

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

例子:'STALIZIZEIZENINGMETHOD','没有'

调谐采样器质量矢量的方法,指定为逗号分隔对,由“MassVectorTuningMethod”和下列值之一

价值 描述
'迭代 - 抽样'

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

'赫索安'

设置MassVector等于负对角线粗糙的logpdf起点

'没有任何'

控件不执行调优MassVector

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

例子:'massvectortuningmethod','hessian'

用于检查分析梯度的标志,指定为包括的逗号分隔对“CheckGradient”,要么真正的(或者1) 或者错误的(或者0.)。

如果“CheckGradient”真正的,然后采样器计算数值梯度起点并将其与分析梯度进行比较logpdf

例子:“CheckGradient”,真的

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

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

例子:VariableNames,{“拦截”,“Beta”}

使用数字梯度的标志,指定为由逗号分隔的对组成'usenumericalgradient',要么真正的(或者1) 或者错误的(或者0.)。

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

例子:'usenumericalgradient',真实

属性

全部展开

哈密顿动力学的步长,指定为一个正标量。

为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制了LeapFrog集成的步骤大小。

哈密顿动力学的步数,指定为一个正整数。

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

动量变量的质量矢量,指定为一个数值列矢量,具有正的值和相同的长度起点

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

方法用于抖动步长和步数,指定为下列值之一。

价值 描述
“jitter-both”

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

'抖动 - numsteps'

抖动只有每个LeapFrog轨迹的步数。

'没有任何'

执行不抖动。

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

调整采样器步长的方法,指定为“dual-averaging”'没有任何'

如果StepSizeTuningMethod=“dual-averaging”, 然后TUNESAMPLER.调整HMC采样器的跳变步长,以实现模拟长度固定值的一定接受比。模拟长度等于步长乘以步数。要设置目标验收率,请使用“TargetAcceptanceRatio”的名称-值对参数TUNESAMPLER.方法。

调整采样器质量矢量的方法,指定为以下值之一。

价值 描述
'迭代 - 抽样'

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

'赫索安'

设置MassVector等于负对角线粗糙的logpdf起点

'没有任何'

控件不执行调优MassVector

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

目标密度及其梯度的对数,指定为函数句柄。

logpdf.返回两个输出参数:[lpdf, glpdf] = LogPDF (X).在这里,LPDF.是以e为底的概率密度(达到一个附加常数)和吗GLPDF.是目录密度的梯度X.输入参数X必须是包含相同数量的元素的列向量曾经繁荣财产。

如果你设置'usenumericalgradient'价值真正的创建采样器时,然后logpdf.返回数值梯度GLPDF.

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

采样变量名,指定为唯一字符向量的单元格数组。

方法

诊断 马尔可夫链蒙特卡罗诊断
drawSamples 用哈密顿蒙特卡罗(HMC)生成马尔可夫链
估计 估计对数概率密度的最大值
TUNESAMPLER. Tune Hamiltonian Monte Carlo(HMC)采样器

例子

全部收缩

创建汉密尔顿蒙特卡罗(HMC)采样器以从正态分布中采样。

首先,保存函数normalDistGrad返回多元正态对数概率密度及其梯度的MATLAB®路径(normalDistGrad在本例的最后定义)。然后,调用带参数的函数来定义logpdf的输入参数hmcSampler功能。

意味着= [1;3);standevs = [1, 2];logpdf = @(θ)normalDistGrad(θ,意味着,standevs);

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

曾经繁荣= randn (2, 1);

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

SMP = HMCSampler(logpdf,startpoint);
smp
SMP = HamiltonIansampler具有属性:步骤化:0.1000 NumSteps:50 MassVector:[2x1 Double] jittermethod:'抖动 - 两个'stoupizezezingeRuningMethod:'双平均'massvectortuningmethod:'迭代 - 采样'logpdf:@(theta)normaldistgrad(theta,意味着,standevs)variablenames:{2x1 cell} startpoint:[2x1 double]

normalDistGrad功能返回多元正常概率密度的对数用手段μ的标准差σ,指定为长度相同的标量或列向量起点.第二个输出参数是相应的梯度。

函数[lpdf,glpdf] = normalDistGrad(X,Mu,Sigma) Z = (X - Mu)./Sigma;lpdf =总和(日志(σ)- 5 *日志(2 *π)- 5 * (z ^ 2));glpdf = z /σ;结尾
在R2017A介绍