MCMC-蒙特卡洛算法

1.马尔可夫链

     有这么一种链,就是当前点的状态的概率只与前一个点的状态有关,这就是一阶马尔可夫链。多阶的就是将与前一个点改成与前k个点。

这里有一个很经典的列子:

就是将一天的天气分成三种状态:出太阳,下雨,阴天。

首先明确点是什么?点就是某一天,可以设为x,

然后就是一条链了,链就是..., 昨天,今天,明天,后天,...

今天的天气状态和今天以前的我们都知道的,那么明天呢?我们现在要做一个天气预报,预报明天或后天的天气情况该怎么办呢?当然,这可以观测天象,但是,观察天象后也还是不能确切的知道什么情况明天会发生。所以,这里就有一个概率计算在里面。现在,假设连续天的天气情况是一个马尔可夫链,且是一阶的,即我们知道今天的情况,那么明天的情况就会由今天的情况所决定。记链为:x(t+1),t+1表示是第t+1天。

假设,今天的天气情况为出太阳。则可以将三种状态今天的概率表示为:(1,0,0),即出太阳概率为1,其它情况为0.这是因为我们知道了今天是出太阳的。那么,明天天气是什么情况呢?这就需要知道转移概率了,所谓转移概率就是一个条件概率:P(明天出太阳/今天出太阳),P(明天下雨/今天出太阳),P(明天阴天/今天出太阳)。是不是,这就直接的知道了明天各种天气情况的概率?当我们去推算后天的时候又该怎么样呢?明天具体是什么天气是不知道的,因此,只能用概率的形式去推算了。这样可以列举出下面的递推公式了:

π(t+1),π(t)是我们每天天气的状况,这里t为时间,P为转移矩阵。对于三种天气状况,我们可得到3x3的转移矩阵,一个例子如下:

这里是借用了文献中的源数据:

这样的话,我们就可以一直的计算下去了,想要哪天的天气,一计算就可以了。但是在实际中是存在误差的,就是这个转移概率矩阵我们不能够精确的得到,所以,天气预报不敢报的很远了。

好了,这里来理一理这个算法的要素:1.假设一个链式马尔可夫链,即要满足马尔可夫的性质,当前状态只和前一状态有关;2.需要一个已知的转移概率矩阵。

以上,只是MCMC方法的基础。但有了这个以后就好办了。

2.MCMC生成随机样本

很多时候,我们都只是在做这样一件事情:就是我们的样本群都已经得到,然后去估计这个样本群服从什么分布。

那么,现在如果我们编写了一个算法,现在要去测试我们所编写的算法是否正确,那么我们是需要测试数据了。当我们的算法是去估算一个样本群的分布时,那么我们应该要去产生某分布的样本数据。这个想到该怎么产生吗?例如,现在要产生一个服从均匀分布的样本群,数量是在10000以上,如果想靠手动去产生,那是不可能的。所以得给用计算机了,这个要是在MATLAB中我们有现成的函数rand()来产生,其它方面也是能够有相应的函数调用。rand函数怎么实现就不说了。这里说一下,如果没有相应的函数来生成随机数该怎么办?例如,我们现在考虑二维高斯分布,那么现在要产生这个分布的数据该怎么产生呢?如果是要产生的数据有一百维呢,一千维呢,一万维呢(这个在图像中很常见的)?虽然知道了这些数据的具体分布,但是要怎么产生样本还是特别的困难。所以就有了MCMC方法了。

2.1Metropolis-Hastings algorithm 

首先这个算法的目的是:产生服从p(x)分布的样本数据,其中p(x) = f(x)/K.这里的K为一常数,但是不知道且很难计算,对于f(x)其表达式是已知的。

这里为Metropolis 算法的主要流程:

1.随机的选取初始样本x0.这里f(x0)>0,当然了,作为概率是应该要大于0的。

2.利用当前产生的x0去产生下一个样本x1,要得到下一个样本我们需要一个转移概率或是称作转移分布q(x0,x1),这个分布可以自己选定。

3.对于给定的x1,计算α=p(x1)/p(x0) = f(x1)/f(x0);对于Metropolis-Hasting算法,转移概率是需要加入到α的计算中去的,这样α表达式为:α=p(x1)*q(x0,x1)/(p(x0)*q(x1,x0) = f(x1)/f(x0),对于q如果是对称的,就转换成了Metropolis算法了。

4.决定x1是否接受:若α>1,则我们直接接受x1,若α<1,则我们就以α的概率接受这个x1.然后将x0= x1,返回到2继续。

下面是用MATLAB编写的算法:

%% 利用Metropolis-Hastings 算法产生样本
% 这里的样本分布为:p(x) = C* x.^(-n/2)*exp(-a/(2x));
% 对于参数n=5,参数a=4.
xlen = 200000;
x = zeros(1,xlen);
x0 = 1 ;
len = length(x);
k = 1 ;
while k <= len
    nextx = 100*rand();
    %compute the p from x0
    pn = (nextx^(-2.5))*(exp(-2/(nextx)));
    p0 = (x0^(-2.5))*(exp(-2/(x0)));
    p = min(pn/p0,1);
    if p >= 1
        x(k) = nextx ;
        x0 = nextx ;
        k = k + 1 ;    
    else
        pp = rand();
        if pp < p
            x(k) = nextx ;
            x0 = nextx   ;
            k = k + 1 ;      
        end
       
    end
   
end
hist = histc(x(10000:k-1),0:0.1:100);
plot(hist);  
xx = 0:0.1:100;
n = 5 ;
a = 4 ;
C = 1 ;
y = C .* xx.^(-n/2).*exp(-a./(2*xx));
figure;
plot(y);

当然,这里有个地方是不那么明确,就是关于q(x,y)该怎么选择?关于q(x,y)的选择主要有两种:1,随机漫步,即y的得到为y=x+z,其中z为一随机变量,可以为任何分布产生的随机变量,为了简单我们可以直接选取z为均匀分布,当然,均匀分布的区间要看x分布的而定。2,独立选取一个分布,即q(x,y)=g(y),g(y)为我们选取的一个分布,当g(y)不是对称的时(g(y) != g(-y)),在式中计算α时用Metropolis-Hastings算法,当然,可以选一个最简单的分布---均匀分布,这样g(x) = g(y) = C。

 

这里完成了一半,对于收敛度的证明不再讲述。文献参考为《Markov Chain Monte Carlo and Gibbs Sampling》Lecture Notes for EEB 581, version 26 April 2004°c B. Walsh 2004。
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于MCMC(马尔科夫-蒙特卡洛)抽样的MATLAB仿真操作视频可以用以下步骤来回答: 首先,我们需要导入MATLAB的MCMC包或工具箱。这个工具箱通常包括与MCMC方法相关的函数和算法,使得我们可以方便地进行MCMC抽样。 接下来,我们可以选择一个合适的概率分布作为我们的目标分布。这个目标分布可以是任何我们感兴趣的分布,比如高斯分布、二项分布等。在使用MCMC进行抽样时,我们通常需要事先了解目标分布的特性和参数。 然后,我们需要选择适当的初始值或起始点。这个初始值可以是目标分布中的任何一个点,但好的初始值可以提高MCMC的效率。 接下来,我们可以使用MCMC的抽样算法(如Metropolis-Hastings算法或Gibbs采样算法)来迭代地生成一系列样本值。我们使用这些样本值来逼近目标分布,并在每一次迭代中根据算法的要求生成新的样本。 MCMC抽样的关键是如何选择新的样本。通常情况下,我们使用一些接受-拒绝准则来决定是否接受生成的新样本。这些准则通常基于样本的概率密度函数值及其与目标分布的比例关系。 最后,我们可以将使用MCMC抽样得到的样本进行分析和可视化。这个过程涉及到使用MATLAB的统计分析函数、绘图函数来计算样本的均值、方差、概率密度函数估计等。这些结果可以帮助我们更好地理解目标分布的特性。 通过上述步骤,我们可以在MATLAB中实现MCMC抽样并对结果进行仿真操作。可以将整个过程录制成视频,包括代码的编写、参数的设定、抽样的过程、结果的分析等。这样的视频将有助于其他人学习和了解MCMC抽样的方法和应用。 ### 回答2: 在进行基于MCMC(马尔科夫-蒙特卡洛)抽样的Matlab仿真操作视频中,我们可以通过以下步骤展示: 首先,我们需要先介绍MCMC方法的基本原理和概念。我们可以使用文字和图表等方式简要说明MCMC的基本思想以及如何利用蒙特卡洛方法来抽样。 接下来,我们可以开始编写Matlab代码。首先,我们需要导入相关的库和数据集。然后,我们可以使用Matlab中的随机数函数来生成随机样本集。 然后,我们可以根据具体的MCMC算法,如Metropolis-Hastings算法或Gibbs采样算法等,编写相应的代码。我们可以逐步解释代码的实现过程,并结合代码示例进行演示。 在演示过程中,我们可以逐步运行代码并显示相应的计算结果,如样本集的变化、概率分布的变化等。通过视频的形式,可以更加直观地展示MCMC方法的工作过程。 此外,我们还可以对MCMC方法的参数进行调整和优化,并展示不同参数设置下的效果对比。例如,可以调整抽样次数、步长、初始值等参数,并观察其对结果的影响。 最后,我们可以总结整个操作视频,并提供针对MCMC方法在Matlab中的应用的一些实际案例和应用领域。这样可以帮助观众更好地理解和应用MCMC方法。 通过以上步骤和演示,在基于MCMC抽样的Matlab仿真操作视频中,观众可以全面了解MCMC方法的基本原理和实现过程,以及在Matlab中的具体应用。 ### 回答3: 基于MCMC(马尔科夫-蒙特卡洛)抽样的MATLAB仿真操作视频旨在展示如何使用MATLAB编写代码来实现MCMC算法,并通过仿真产生满足概率分布的样本。下面将简要介绍该视频内容。 视频开始介绍了MCMC的原理和概念,包括马尔科夫链、平稳分布、转移概率等基本概念。随后,视频详细讲解如何在MATLAB中实现MCMC算法。 首先,视频介绍了如何定义样本空间以及所需的概率分布函数。然后,视频展示了如何选择一个初始状态,并通过随机数生成器产生一个样本点。接下来,视频讲解了如何编写转移概率函数,即如何从当前样本点生成下一个样本点。 在实际操作中,视频给出了如何选择合适的转移概率分布,并进行参数设置的建议。然后,视频演示了如何使用循环结构来不断生成新的样本点,并将生成的样本点保存到矩阵中。 在生成一定数量的样本点后,视频解释了如何进行样本的收敛性测试,以判断样本是否已经达到平稳分布。视频提供了一些常见的收敛性统计检验方法,并给出了MATLAB中已有的函数来进行检验。 最后,视频展示了如何使用生成的样本点来估计目标概率分布的期望值和方差等统计量。视频详细解释了如何通过样本均值和样本方差来进行估计,并给出了相应的MATLAB代码。 通过该视频,观众可以了解到如何使用MATLAB来实现MCMC算法,并且掌握了一些基本的MCMC相关概念和操作技巧。视频内容简洁明了,易于理解和学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值