主要内容

汉密尔顿人寻找课程

哈密顿蒙特卡罗采样器

描述

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

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

创建采样器后,可以使用本类的方法计算映射(最大-A-postiori)点估计,调整采样器,绘制样本和检查汇聚诊断。有关此工作流程的示例,请参阅使用Hamiltonian Monte Carlo的贝叶斯线性回归

建造

HMC.= hmcsampler(logpdf.曾经繁荣创建一个汉密尔顿蒙特卡罗(HMC)采样器,返回为HamiltonianSampler目的。logpdf.是一种函数手柄,可评估均衡分布的概率密度及其梯度的对数。栏矢量曾经繁荣是启动HMC采样的初始点。

HMC.= hmcsampler(___名称,值使用一个或多个名称-值对参数指定其他选项。在所有其他输入参数之后指定名称-值对参数。

输入参数

全部展开

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

logpdf.必须返回两个输出参数:[LPDF,GLPDF] = logpdf(x).这里,lpdf为以e为底的对数概率密度(直到一个附加常数),GLPDF.是对数密度的梯度,和点X是一个列向量,元素数量相同曾经繁荣

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

如果“UseNumericalGradient”值设置为真的, 然后logpdf.不需要将梯度返回为第二个输出。以来,使用数值梯度可以更容易logpdf.不需要计算渐变,但它可以使抽样慢。

数据类型:function_handle.

初始点以开始采样,指定为数字列向量。

数据类型:单身的|

名称-值对的观点

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

例子:VariableNames,{“拦截”,“Beta”},“MassVectorTuningMethod”、“海赛”指定采样变量名称和批量向量调整方法'赫索安'

汉密尔顿动态的步长,指定为逗号分隔的配对'一步的大小'和正标量。

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

您可以使用自动调整步骤尺寸TUNESAMPLER.

例子:“StepSize”,0.2

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

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

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

例子:'numsteps',20

动量变量的质量矢量,指定为逗号分隔对组成'MassVector'和数字列向量,具有正值和相同的长度曾经繁荣

在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。

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

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

抖动步骤尺寸和步数的方法,指定为逗号分隔的对“JitterMethod”和以下之一:

价值 描述
'抖动 - 两个'

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

'抖动 - numsteps'

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

“没有”

执行不抖动。

通过抖动,采样器随机选择每个跳过轨迹的步长或步数,因为比例小于'一步的大小'“NumSteps”值。利用抖动来提高哈密顿动力学跳变积分的稳定性。

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

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

如果'stemizizeiningmethod'值设置为'双平均', 然后TUNESAMPLER.调整HMC采样器的跨越步骤尺寸,以实现模拟长度的固定值的某个接受比率。模拟长度等于步长乘以步数的次数。要设置目标接受率,请使用'targetacceptanceratio'名称 - 值对参数TUNESAMPLER.方法。

例子:'STALIZIZIZETUNINGMETHOD','没有'

调整采样器质量矢量的方法,指定为包括的逗号分隔对“MassVectorTuningMethod”和以下值之一

价值 描述
“iterative-sampling”

托儿MassVector通过使用一系列质量矢量估计来绘制样品来通过连续近似。

'赫索安'

设置MassVector等于负面对角线的阴性logpdf.曾经繁荣

“没有”

控件不执行调优MassVector

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

例子:“MassVectorTuningMethod”、“海赛”

用于检查分析梯度的标志,指定为由逗号分隔的对组成“CheckGradient”和任何一种真的(要么1)或(要么0.).

如果“CheckGradient”真的然后,采样器计算数值梯度曾经繁荣并将其与分析梯度进行比较logpdf.

例子:“CheckGradient”,真的

采样变量名称,指定为逗号分隔对'variablenames'以及字符向量的字符串数组或单元格数组。数组中的元素必须是唯一的。数组的长度必须与的长度相同曾经繁荣

提供一个'variablenames'值来标记要使用HMC采样器采样的矢量组件。

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

使用数值梯度的标志,指定为逗号分隔对组成“UseNumericalGradient”和任何一种真的(要么1)或(要么0.).

如果你设置了“UseNumericalGradient”价值真的然后,HMC采样器以返回的日志密度数值估计梯度logpdf..在这种情况下logpdf.功能不需要将日志密度的梯度返回为第二个输出。使用数值梯度使HMC采样较慢。

例子:'usenumericalgradient',真实

属性

全部展开

哈密​​顿动态的步长,指定为正标量。

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

哈密​​顿动态的步数,指定为正整数。

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

动量变量的质量矢量,指定为一个数值列矢量,具有正的值和相同的长度曾经繁荣

在每个马尔可夫链提议中,动量变量与感兴趣变量相关的“质量”控制着哈密顿动力学。

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

价值 描述
'抖动 - 两个'

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

'抖动 - numsteps'

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

“没有”

执行不抖动。

通过抖动,采样器随机选择每个跳过轨迹的步长或步数,因为比例小于'一步的大小'“NumSteps”值。利用抖动来提高哈密顿动力学跳变积分的稳定性。

调整采样器步长的方法,指定为'双平均'要么“没有”

如果stemizezeTuningMethod.等于'双平均', 然后TUNESAMPLER.调整HMC采样器的跨越步骤尺寸,以实现模拟长度的固定值的某个接受比率。模拟长度等于步长乘以步数的次数。要设置目标接受率,请使用'targetacceptanceratio'名称 - 值对参数TUNESAMPLER.方法。

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

价值 描述
“iterative-sampling”

托儿MassVector通过使用一系列质量矢量估计来绘制样品来通过连续近似。

'赫索安'

设置MassVector等于负面对角线的阴性logpdf.曾经繁荣

“没有”

控件不执行调优MassVector

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

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

LogPDF返回两个输出参数:[LPDF,GLPDF] = logpdf(x).这里,lpdf是基本-E日志概率密度(最多常数)和GLPDF.这一点的对数密度梯度是多少X.输入论点X必须是包含相同数量的元素的列向量起点财产。

如果你设置了“UseNumericalGradient”价值真的当创建采样器时,那么LogPDF返回数值梯度GLPDF.

初始点以开始采样,指定为数字列向量。

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

方法

诊断 马尔可夫链蒙特卡罗诊断
绘制 使用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;结束
在R2017A介绍