Example: Sampling from a bivariate a Normal distribution

目标函数p(x)是一种规范化形式,表示如下:

均值是:

方差是:

为了使用吉布斯采样从这个分布中采样,我们需要有变量/维度x1和x2的条件分布:

是第二个维度的前一个状态,是从

中得到的第一个维度的状态。有差异的原因是更新x1和x2用的是(t-1)和t时刻的状态,在上一节中的算法大纲第三步可以看出来。第t次迭代,我们首先以变量x2的最近状态即第(t-1)次迭代结果为条件,为x1采样一种新状态。然后再以第t次迭代得到的x1的最新状态为条件采样得到变量x2。

经过一些数学推导(http://fourier.eng.hmc.edu/e161/lectures/gaussianprocess/node7.html),我们发现目标正态分布的两个条件分布是:

每一个都是单变量的正态分布,其中均值依赖条件变量的最近状态的值,方差依赖两个变量之间的目标方差。

使用上述描述的变量x1和x2的条件概率,我们下面采用matlab实现吉布斯采样,输出的采样如下:

clear all

close all

clc

%seed 用来控制 rand 和 randn

% 如果没有设置seed,每次运行rand或randn产生的随机数都是不一样的

% 用了seed,比如设置rand('seed',0);,那么每次运行rand产生的随机数是一样的,这样对调试程序很有帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
rand('seed' ,12345);    
nSamples = 5000;     
mu = [0 0]; % TARGET MEAN目标均值
rho=[1 0.8;0.8 1];  % 目标方差  
    
%% INITIALIZE THE GIBBS SAMPLER  
propSigma = 1; % PROPOSAL VARIANCE  
minn = [-3 -3];  
maxx = [3 3];  
    
%% INITIALIZE SAMPLES  
x = zeros(nSamples,2);  
x(1,1) = unifrnd(minn(1), maxx(1));%unifrnd生成连续均匀分布的随机数  
x(1,2) = unifrnd(minn(2), maxx(2));  
    
dims = 1:2; % INDEX INTO EACH DIMENSION  每一维度数组索引
    
%% RUN GIBBS SAMPLER  
 for t=2:nSamples
     T=[t-1,t];     
     for iD=1:2
         i=iD+1;
         if(i>2)
             i=1;
         end
         muCond = mu(iD) + rho(i,iD)*(x(T(iD),i)-mu(i));%计算均值=μ(1)+ρ(21)*(x(n,2)-μ(2)),其中x(n,2)代表样本第n个数据的第二维 
         varCond = sqrt(1-rho(i,iD)^2);%计算方差  
         x(t,iD) = normrnd(muCond,varCond);%正态分布随机函数,计算得到当前第t个数据的第1维数据value  
     end
 end
    
% DISPLAY SAMPLING DYNAMICS  
figure;  
h1 = scatter(x(:,1),x(:,2),'r.');%scatter描绘散点图,x为横坐标,y为纵坐标  
    
% CONDITIONAL STEPS/SAMPLES  
hold on;%画出前3个采样点  
for t = 1:3  
    plot([x(t,1),x(t+1,1)],[x(t,2),x(t,2)],'k-');  
    plot([x(t+1,1),x(t+1,1)],[x(t,2),x(t+1,2)],'k-');  
    h2 = plot(x(t+1,1),x(t+1,2),'ko');  
end  
    
h3 = scatter(x(1,1),x(1,2),'go','Linewidth',3);  
legend([h1,h2,h3],{'Samples','1st 50 Samples','x(t=0)'},'Location','Northwest')  
hold off;  
xlabel('x_1');  
ylabel('x_2');  
axis square

输出结果:

参考文献:

https://theclevermachine.wordpress.com/2012/11/05/mcmc-the-gibbs-sampler/

http://fourier.eng.hmc.edu/e161/lectures/gaussianprocess/node7.html

http://blog.csdn.net/zb1165048017/article/details/51778694

本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1794340,如需转载请自行联系原作者

Gibbs Sampler相关推荐

  1. Gibbs sampling

    Gibbs sampling(吉布斯采样)(资料集合) 维基百科,自由的百科全书: In statistics, Gibbs sampling or a Gibbs sampler is a Mark ...

  2. Gibbs sampling [Gibbs采样]

    关于Gibbs sampling, 首先看一下Wiki上的解释:Gibbs sampling or Gibbs sampler is an algorithm to generate a sequen ...

  3. MCMC:Gibbs 采样(matlab 实现)

    MCMC: The Gibbs Sampler 多元高斯分布的边缘概率和条件概率 Marginal and conditional distributions of multivariate norm ...

  4. MCMC: Metropolis-Hastings, Gibbs and slice sampling

    从标题中即已看出,Metropolis-Hastings.Gibbs and slice sampling是MCMC(基于马尔科夫链的蒙特卡洛采样算法)的变体及改进算法. With MCMC, we ...

  5. Collapsed Gibbs Sampling

    (The contents of this post are largely due to a conversation with Percy Liang at ACL.) I'm a big fan ...

  6. 随机采样和随机模拟:吉布斯采样Gibbs Sampling

    2016年05月12日 00:24:21 阅读数:45658 http://blog.csdn.net/pipisorry/article/details/51373090 吉布斯采样算法详解 为什么 ...

  7. 三步完成吉布斯采样Gibbs sampling

    吉布斯采样的具体执行过程只需要三个步骤,非常非常简单好理解,其它相关的背景知识能帮助加深理解. 一.Preliminaries Monte Carlo methods 它是很宽泛的一类计算方法,依赖重 ...

  8. 【ML】线性回归的吉布斯采样(Gibbs Sampling)实现(python)

    导航 Bayesian Linear Regression Gibbs Sampling Derving a Gibbs sampler Update for β0\beta_0β0​ Update ...

  9. 随机采样和随机模拟:吉布斯采样Gibbs Sampling实现高斯分布参数推断

    http://blog.csdn.net/pipisorry/article/details/51539739 吉布斯采样的实现问题 本文主要说明如何通过吉布斯采样来采样截断多维高斯分布的参数(已知一 ...

最新文章

  1. torch 特征对齐
  2. GRE核心词汇助记与精练-List11弯、折、扭
  3. beanpostprocessor与@autowired的关系
  4. Kestrel的ListenAnyIP和ListenLocalhost的区别
  5. access update语句执行_SQL Server与Access数据库sql语法十大差异
  6. 信息学奥赛一本通C++语言——1012:计算多项式的值
  7. 外媒:苹果聘请更多司机在加州测试其自动驾驶汽车
  8. 在SQL Server中插入IN-T-SQL语句
  9. android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
  10. 【Oracle】ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
  11. Oracle VM VirtualBox 随系统自动启动虚拟机的方法
  12. 美国欲投 2.58 亿美元与中国争夺超算霸主地位
  13. 【Python】【有趣的模块】【requests】【一】HTTP头信息总结
  14. fiddler——一款莱斯的抓包工具
  15. JAVA - 银行卡认证
  16. windows server 2008 进行多域名指向同一个ip
  17. 工作手册 会计核算制度 目录 1. 会计核算管理制度 1 2. 会计档案管理办法 4 1.会计核算管理制度 8. 1.采取借贷记账法记账,采用权责发生制,即凡是收益已经实现,用已经发生,不论款
  18. 浅谈微分求导+泰勒展开+生成函数
  19. 后台启动elastisearch-head,避免后台启动es head在关闭shell后es head自动关闭,网上一大堆错误的,这个是正解,来自互联网
  20. 学生管理系统(JSP+Servlet+MySQL)

热门文章

  1. mysql score表_MySQL连表查询练习题
  2. BZOJ3238 后缀自动机+推公式
  3. C 中用语言描述出下述方法的功能,文献检索复习题A
  4. 如何将彩色证件照调成黑白
  5. 推荐一个外国的数据结构在线演示网站
  6. DeepSORT C++版的一个bug
  7. python实现栅栏加密 超简易列表版本
  8. 在 Python 中打印换行符——打印一个新行
  9. 免费观看coursera上的课程
  10. 使用腾讯云服务器搭建离线(中转)网盘