哈密顿蒙特卡罗采样器
哈密顿蒙特卡罗(HMC)采样器是一种基于梯度的马尔可夫链蒙特卡罗采样器,您可以使用它从概率密度生成样本p(x).HMC取样要求规格log p(x)及其梯度。
参数向量X必须是不受约束的,这意味着每个元素X可以是任何实数。为了采样约束参数,在使用HMC采样器之前将这些参数转换为无约会变量。
创建采样器后,可以使用本类的方法计算映射(最大-A-postiori)点估计,调整采样器,绘制样本和检查汇聚诊断。有关此工作流程的示例,请参阅使用Hamiltonian Monte Carlo的贝叶斯线性回归.
创建一个汉密尔顿蒙特卡罗(HMC)采样器,返回为HMC.
= hmcsampler(logpdf.
那曾经繁荣
)HamiltonianSampler
目的。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,...,namen,valuen
.
VariableNames,{“拦截”,“Beta”},“MassVectorTuningMethod”、“海赛”
指定采样变量名称和批量向量调整方法'赫索安'
.
'一步的大小'
-哈密顿动力学的步长0.1
(默认)|正标量汉密尔顿动态的步长,指定为逗号分隔的配对'一步的大小'
和正标量。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此参数控制跨越式集成的步骤大小。
您可以使用自动调整步骤尺寸TUNESAMPLER.
.
例子:“StepSize”,0.2
“NumSteps”
-哈密顿动力学的阶数50.
(默认)|正整数哈密顿动力学的步数,指定为逗号分隔对组成“NumSteps”
和一个正整数。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此参数控制LeapFrog集成的步骤数。
您可以使用自动调优步骤数TUNESAMPLER.
.
例子:'numsteps',20
'MassVector'
-动量变量的质量矢量(大小(startpoint,1),1)
(默认)|数字列向量动量变量的质量矢量,指定为逗号分隔对组成'MassVector'
和数字列向量,具有正值和相同的长度曾经繁荣
.
在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。
您可以使用自动调整质量矢量TUNESAMPLER.
.
例子:'MassVector',Rand(3,1)
“JitterMethod”
-抖动步长和步数的方法'抖动 - 两个'
(默认)|'抖动 - numsteps'
|“没有”
抖动步骤尺寸和步数的方法,指定为逗号分隔的对“JitterMethod”
和以下之一:
价值 | 描述 |
---|---|
'抖动 - 两个' |
随机抖动步长和步数为每个跳变轨迹。 |
'抖动 - numsteps' |
抖动只有每个跳过轨迹的步数。 |
“没有” |
执行不抖动。 |
通过抖动,采样器随机选择每个跳过轨迹的步长或步数,因为比例小于'一步的大小'
和“NumSteps”
值。利用抖动来提高哈密顿动力学跳变积分的稳定性。
例子:'jittermethod','抖动 - 两个'
'stemizizeiningmethod'
-调谐采样器步长的方法'双平均'
(默认)|“没有”
调整采样器步长的方法,指定为包括的逗号分隔对'stemizizeiningmethod'
和'双平均'
要么“没有”
.
如果'stemizizeiningmethod'
值设置为'双平均'
, 然后TUNESAMPLER.
调整HMC采样器的跨越步骤尺寸,以实现模拟长度的固定值的某个接受比率。模拟长度等于步长乘以步数的次数。要设置目标接受率,请使用'targetacceptanceratio'
名称 - 值对参数TUNESAMPLER.
方法。
例子:'STALIZIZIZETUNINGMETHOD','没有'
“MassVectorTuningMethod”
-调谐采样器质量矢量的方法“iterative-sampling”
(默认)|'赫索安'
|“没有”
调整采样器质量矢量的方法,指定为包括的逗号分隔对“MassVectorTuningMethod”
和以下值之一
价值 | 描述 |
---|---|
“iterative-sampling” |
托儿 |
'赫索安' |
|
“没有” |
控件不执行调优 |
要执行调整,请使用TUNESAMPLER.
方法。
例子:“MassVectorTuningMethod”、“海赛”
'variablenames'
-采样变量名称{'x1','x2',...}
(默认)|字符串数组|字符向量的单元格数组采样变量名称,指定为逗号分隔对'variablenames'
以及字符向量的字符串数组或单元格数组。数组中的元素必须是唯一的。数组的长度必须与的长度相同曾经繁荣
.
提供一个'variablenames'
值来标记要使用HMC采样器采样的矢量组件。
例子:VariableNames,{“拦截”,“Beta”}
“UseNumericalGradient”
-使用数值梯度的标志假
(要么0.
)(默认)|真的
(要么1
)使用数值梯度的标志,指定为逗号分隔对组成“UseNumericalGradient”
和任何一种真的
(要么1
)或假
(要么0.
).
如果你设置了“UseNumericalGradient”
价值真的
然后,HMC采样器以返回的日志密度数值估计梯度logpdf.
.在这种情况下logpdf.
功能不需要将日志密度的梯度返回为第二个输出。使用数值梯度使HMC采样较慢。
例子:'usenumericalgradient',真实
一步的大小
-哈密顿动力学的步长0.1
(默认)|正标量哈密顿动态的步长,指定为正标量。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制跳跃式集成的步长。
numsteps.
-哈密顿动力学的阶数50.
(默认)|正整数哈密顿动态的步数,指定为正整数。
为了给出马尔可夫链的一种新的状态,HMC采样器采用跳越式积分的方法集成了哈密顿动力学。此属性的值控制跳跃式集成的步骤数。
MassVector
-动量变量的质量矢量(大小(startpoint,1),1)
(默认)|数字列向量动量变量的质量矢量,指定为一个数值列矢量,具有正的值和相同的长度曾经繁荣
.
在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。
jittermethod.
-抖动步长和步数的方法'抖动 - 两个'
(默认)|'抖动 - numsteps'
|“没有”
方法用于抖动步长和步数,指定为下列值之一。
价值 | 描述 |
---|---|
'抖动 - 两个' |
随机抖动每个跳过轨迹的步长和步骤数。 |
'抖动 - numsteps' |
抖动只有每个跳过轨迹的步数。 |
“没有” |
执行不抖动。 |
通过抖动,采样器随机选择每个跳过轨迹的步长或步数,因为比例小于'一步的大小'
和“NumSteps”
值。利用抖动来提高哈密顿动力学跳变积分的稳定性。
stemizezeTuningMethod.
-调谐采样器步长的方法'双平均'
(默认)|“没有”
调整采样器步长的方法,指定为'双平均'
要么“没有”
.
如果stemizezeTuningMethod.
等于'双平均'
, 然后TUNESAMPLER.
调整HMC采样器的跨越步骤尺寸,以实现模拟长度的固定值的某个接受比率。模拟长度等于步长乘以步数的次数。要设置目标接受率,请使用'targetacceptanceratio'
名称 - 值对参数TUNESAMPLER.
方法。
MassVectortuningMethod.
-调谐采样器质量矢量的方法“iterative-sampling”
(默认)|'赫索安'
|“没有”
调谐采样器质量矢量的方法,指定为下列值之一。
价值 | 描述 |
---|---|
“iterative-sampling” |
托儿 |
'赫索安' |
设置 |
“没有” |
控件不执行调优 |
要执行调整,请使用TUNESAMPLER.
方法。
LogPDF
-目标密度及其梯度的对数目标密度及其渐变的对数指定为函数手柄。
LogPDF
返回两个输出参数:[LPDF,GLPDF] = logpdf(x)
.这里,lpdf
是基本-E日志概率密度(最多常数)和GLPDF.
这一点的对数密度梯度是多少X
.输入论点X
必须是包含相同数量的元素的列向量起点
财产。
如果你设置了“UseNumericalGradient”
价值真的
当创建采样器时,那么LogPDF
返回数值梯度GLPDF.
.
起点
-开始抽样的初始点初始点以开始采样,指定为数字列向量。
variablenames.
-采样变量名称{'x1','x2',...}
(默认)|唯一字符向量的单元格数组采样变量名称,指定为唯一字符向量的单元格数组。
诊断 | 马尔可夫链蒙特卡罗诊断 |
绘制 | 使用Hamiltonian Monte Carlo(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,startpointo);
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]
这normalDistGrad
功能返回多元正常概率密度的对数用手段亩
的标准差σ
,指定为标量或列向量相同的长度曾经繁荣
.第二个输出参数是相应的渐变。
功能[lpdf,glpdf] = uscledistgrad(x,mu,sigma)z =(x - mu)./ sigma;lpdf = sum(-log(sigma) - .5 * log(2 * pi) - .5 *(z. ^ 2));glpdf = -z./sigma;结束
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。