哈密顿蒙特卡罗采样器
哈密顿蒙特卡罗(HMC)采样器是一种基于梯度的马尔可夫链蒙特卡罗采样器,您可以使用它从概率密度生成样本P (x).HMC采样需要规范日志P (x)及其梯度。
参数向量X必须是不受约束的,这意味着X可以是任何实数。为了采样约束参数,在使用HMC采样器之前将这些参数转换为无约会变量。
创建采样器后,可以使用此类方法计算MAP(最大后验概率)点估计、调整采样器、绘制样本和检查收敛诊断。有关此工作流的示例,请参见基于哈密顿蒙特卡罗的贝叶斯线性回归.
创建一个汉密尔顿蒙特卡罗(HMC)采样器,返回为hmc
= HMCSampler(logpdf
那起点
的)汉密尔顿人寻找者
对象。logpdf
是一个函数句柄,用于计算均衡分布及其梯度的概率密度的对数。列向量起点
是启动HMC采样的初始点。
使用一个或多个名称值对参数指定其他选项。在所有其他输入参数后指定名称值对参数。hmc
= HMCSampler(___那名称,价值
的)
logpdf
-目标密度及其梯度的对数目标密度及其梯度的对数,指定为函数句柄。
logpdf
必须返回两个输出参数:[lpdf,glpdf] = logpdf(x)
.在这里,LPDF.
为以e为底的对数概率密度(直到一个附加常数),GLPDF.
是日志密度的渐变,以及点X
列向量的元素个数是否与列向量相同起点
.
输入参数X
来logpdf
必须是不受约束的,这意味着X
可以是任何实数。在使用HMC采样器之前,将任何有约束的采样参数转换为无约束的变量。
如果是'usenumericalgradient'
值设置为真正的
, 然后logpdf
不需要返回梯度作为第二个输出。使用数值梯度可能更容易,因为logpdf
不需要计算渐变,但它可以使抽样慢。
数据类型:function_handle.
起点
-开始抽样的起始点开始抽样的初始点,指定为数字列向量。
数据类型:单
|双
指定可选的逗号分离对名称,价值
参数。的名字
是参数名称和价值
为对应值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
'variablenames',{'拦截','beta'},'massvectortuningmethod','hessian'
指定采样变量名和质量矢量调优方法'赫索安'
.
StepSize
-哈密顿动力学的步长0.1
(默认)|正标量哈密顿动力学的步长,指定为逗号分隔对,由“StepSize”
一个正标量。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。这个参数控制跳跃式集成的步长。
您可以使用以下命令自动调整步长TUNESAMPLER.
.
例子:'stepsize',0.2
NumSteps
-哈密顿动态的步数50
(默认)|正整数汉密尔顿语动态的步数,指定为逗号分隔的对组成'numsteps'
一个正整数。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此参数控制LeapFrog集成的步骤数。
您可以使用自动调优步骤数TUNESAMPLER.
.
例子:'numsteps',20
MassVector
-动量变量的质量矢量(大小(曾经繁荣,1),1)
(默认)|数字列向量动量变量的质量矢量,指定为逗号分隔对,由“MassVector”
一个正数的列向量和起点
.
与兴趣变量相关的“群众”的动量变量控制每个马尔可夫链提案中的哈密顿动力学。
你可以自动调整质量矢量使用TUNESAMPLER.
.
例子:“MassVector”,兰德(3,1)
JitterMethod
-抖动步长和步数的方法“jitter-both”
(默认)|'抖动 - numsteps'
|'没有任何'
用于抖动步长和步数的方法,指定为由逗号分隔的对组成“JitterMethod”
以及以下之一:
价值 | 描述 |
---|---|
“jitter-both” |
随机抖动步长和步数为每个跳变轨迹。 |
'抖动 - numsteps' |
抖动只有每个LeapFrog轨迹的步数。 |
'没有任何' |
执行不抖动。 |
对于抖动,采样器随机选择步长或每个跳变轨迹的步数为小于的值“StepSize”
和'numsteps'
价值观。使用抖动来提高汉密尔顿动态的跨越式集成的稳定性。
例子:“JitterMethod”、“jitter-both”
StepSizeTuningMethod
-调整采样器步长的方法“dual-averaging”
(默认)|'没有任何'
用于调整采样器步长的方法,指定为由逗号分隔的对组成'stemizezezeiningmethod'
和“dual-averaging”
或'没有任何'
.
如果是'stemizezezeiningmethod'
值设置为“dual-averaging”
, 然后TUNESAMPLER.
调整HMC采样器的跳变步长,以实现模拟长度固定值的一定接受比。模拟长度等于步长乘以步数。要设置目标验收率,请使用“TargetAcceptanceRatio”
的名称-值对参数TUNESAMPLER.
方法。
例子:'STALIZIZEIZENINGMETHOD','没有'
MassVectorTuningMethod
-调谐采样器质量矢量的方法'迭代 - 抽样'
(默认)|'赫索安'
|'没有任何'
调谐采样器质量矢量的方法,指定为逗号分隔对,由“MassVectorTuningMethod”
和下列值之一
价值 | 描述 |
---|---|
'迭代 - 抽样' |
托儿 |
'赫索安' |
|
'没有任何' |
控件不执行调优 |
要执行调优,请使用TUNESAMPLER.
方法。
例子:'massvectortuningmethod','hessian'
variablenames.
-抽样的变量名{x1, x2,…}
(默认)|字符串数组|字符向量的单元格数组抽样变量名,指定为逗号分隔对,由“VariableNames”
以及字符向量的字符串数组或单元格数组。数组中的元素必须是唯一的。数组的长度必须与的长度相同起点
.
供应A.“VariableNames”
值来标记要使用HMC采样器采样的矢量组件。
例子:VariableNames,{“拦截”,“Beta”}
UsenumericalGradient.
-使用数值梯度的标志错误的
(或者0.
的)(默认)|真正的
(或者1
的)使用数字梯度的标志,指定为由逗号分隔的对组成'usenumericalgradient'
,要么真正的
(或者1
) 或者错误的
(或者0.
)。
如果你设置'usenumericalgradient'
价值真正的
,则HMC采样器根据返回的测井密度数值估计梯度logpdf
.在这种情况下logpdf
功能不需要将日志密度的渐变返回为第二个输出。使用数值梯度使HMC采样较慢。
例子:'usenumericalgradient',真实
StepSize
-哈密顿动力学的步长0.1
(默认)|正标量哈密顿动力学的步长,指定为一个正标量。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制了LeapFrog集成的步骤大小。
NumSteps
-哈密顿动态的步数50
(默认)|正整数哈密顿动力学的步数,指定为一个正整数。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制跳跃式集成的步骤数。
MassVector
-动量变量的质量矢量(大小(曾经繁荣,1),1)
(默认)|数字列向量动量变量的质量矢量,指定为一个数值列矢量,具有正的值和相同的长度起点
.
与兴趣变量相关的“群众”的动量变量控制每个马尔可夫链提案中的哈密顿动力学。
JitterMethod
-抖动步长和步数的方法“jitter-both”
(默认)|'抖动 - numsteps'
|'没有任何'
方法用于抖动步长和步数,指定为下列值之一。
价值 | 描述 |
---|---|
“jitter-both” |
随机抖动每个跳变轨迹的步长和步数。 |
'抖动 - numsteps' |
抖动只有每个LeapFrog轨迹的步数。 |
'没有任何' |
执行不抖动。 |
对于抖动,采样器随机选择步长或每个跳变轨迹的步数为小于的值“StepSize”
和'numsteps'
价值观。使用抖动来提高汉密尔顿动态的跨越式集成的稳定性。
StepSizeTuningMethod
-调整采样器步长的方法“dual-averaging”
(默认)|'没有任何'
调整采样器步长的方法,指定为“dual-averaging”
或'没有任何'
.
如果StepSizeTuningMethod
=“dual-averaging”
, 然后TUNESAMPLER.
调整HMC采样器的跳变步长,以实现模拟长度固定值的一定接受比。模拟长度等于步长乘以步数。要设置目标验收率,请使用“TargetAcceptanceRatio”
的名称-值对参数TUNESAMPLER.
方法。
MassVectorTuningMethod
-调谐采样器质量矢量的方法'迭代 - 抽样'
(默认)|'赫索安'
|'没有任何'
调整采样器质量矢量的方法,指定为以下值之一。
价值 | 描述 |
---|---|
'迭代 - 抽样' |
托儿 |
'赫索安' |
设置 |
'没有任何' |
控件不执行调优 |
要执行调优,请使用TUNESAMPLER.
方法。
logpdf.
-目标密度及其梯度的对数目标密度及其梯度的对数,指定为函数句柄。
logpdf.
返回两个输出参数:[lpdf, glpdf] = LogPDF (X)
.在这里,LPDF.
是以e为底的概率密度(达到一个附加常数)和吗GLPDF.
是目录密度的梯度X
.输入参数X
必须是包含相同数量的元素的列向量曾经繁荣
财产。
如果你设置'usenumericalgradient'
价值真正的
创建采样器时,然后logpdf.
返回数值梯度GLPDF.
.
曾经繁荣
-开始抽样的起始点开始抽样的初始点,指定为数字列向量。
variablenames.
-抽样的变量名{x1, x2,…}
(默认)|独特字符向量的单元格阵列采样变量名,指定为唯一字符向量的单元格数组。
诊断 | 马尔可夫链蒙特卡罗诊断 |
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 /σ;结尾
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获得最佳网站性能。其他MathWorks国家网站未优化您所在地的访问。