文章目录

  • 马氏链
    • 原理
  • 采样方法
    • MH采样
      • 原理
      • 代码
    • Gibbs采样
      • 原理
      • 代码

马氏链

原理

采样方法

所谓的采样方法,主要就是利用了马氏链的性质

πn(x)\pi_n(x)πn​(x)为一个离散的概率分布
πn(x)=[πn(1),πn(2),...,πn(m)]\pi_n(x)=[\pi_n(1),\pi_n(2),...,\pi_n(m)]πn​(x)=[πn​(1),πn​(2),...,πn​(m)]
当马氏链收敛至平稳分布时(假设第n次转移时收敛),πn(x),πn+1(x),πn+2(x),....\pi_n(x),\pi_{n+1}(x),\pi_{n+2}(x),....πn​(x),πn+1​(x),πn+2​(x),....这些概率分布都是相等的

若随机变量X0∼π0(x)X_0 \sim \pi_0(x)X0​∼π0​(x),X1∼π1(x)X_1 \sim \pi_1(x)X1​∼π1​(x),…,Xn∼πn(x)X_n \sim \pi_n(x)Xn​∼πn​(x),Xn+1∼πn+1(x)X_{n+1} \sim \pi_{n+1}(x)Xn+1​∼πn+1​(x)

那么这些随机变量Xn∼πn(x)X_n \sim \pi_n(x)Xn​∼πn​(x),Xn+1∼πn+1(x)X_{n+1} \sim \pi_{n+1}(x)Xn+1​∼πn+1​(x),…都是服从同一个分布的
对于一个具体的状态,即一个具体的值xix_ixi​而非随机变量,从xnx_nxn​开始的一系列这样的值xn,xn+1,xn+2...x_n,x_{n+1},x_{n+2}...xn​,xn+1​,xn+2​...就是服从同一个分布π(x)=πn(x)\pi(x)=\pi_n(x)π(x)=πn​(x)的样本点,我们通过这种方式可以生成某个分布的大量的随机样本点,这就是传说中的采样

MH采样

原理

代码

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
# 正态分布
x_=np.linspace(-20,20,100)
y_=stats.norm.pdf(x_,0,5)# 正态分布
# y_=stats.expon(scale=1).pdf(x_)# 指数分布# 采样数10000
Samp_Num=10000
result=[]
init=1
result.append(init)
# p=lambda r:stats.expon(scale=1).pdf(r)# 指数分布
p=lambda r:stats.norm.pdf(r,0,5) # 正态分布
# 生成均值为v,标准差为2的正态分布的1个样本
q=lambda v:stats.norm.rvs(loc = v,scale = 2, size = 1)for i in range(Samp_Num):y=q(result[i])# 从分布q(y|x_t)中随机采样一个样本点alpha=min(1,p(y)/p(result[i]))# 接受概率(简化)u=np.random.rand(1)# 从uniform(0,1)中采样if u<alpha:result.append(y[0])# 接受else:result.append(result[i])# 拒绝if i%1000==0:print(i)
plt.hist(result, 50, density=1, facecolor='blue', alpha=0.5)
plt.plot(x,raw_y)
plt.show()

下图为利用MH采样法拟合的高斯分布

Gibbs采样

原理

Gibbs采样是高维采样的推广,用以生成高维联合概率分布的样本点

代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
def p_x_given_y(y, mus, sigmas):mu = mus[0] + sigmas[1, 0] / sigmas[0, 0] * (y - mus[1])sigma = sigmas[0, 0] - sigmas[1, 0] / sigmas[1, 1] * sigmas[1, 0]return np.random.normal(mu, sigma)def p_y_given_x(x, mus, sigmas):mu = mus[1] + sigmas[0, 1] / sigmas[1, 1] * (x - mus[0])sigma = sigmas[1, 1] - sigmas[0, 1] / sigmas[0, 0] * sigmas[0, 1]return np.random.normal(mu, sigma)def gibbs_sampling(mus, sigmas, iter=10000):samples = np.zeros((iter, 2))y = np.random.rand() * 10for i in range(iter):x = p_x_given_y(y, mus, sigmas)y = p_y_given_x(x, mus, sigmas)samples[i, :] = [x, y]return samples
mus = np.array([5, 5])
sigmas = np.array([[1, .9], [.9, 1]])
x,y = np.random.multivariate_normal(mus, sigmas, int(1e5)).T
sns.jointplot(x,y,kind='kde')

下图为生成的联合高斯分布图

samples = gibbs_sampling(mus, sigmas)
sns.jointplot(samples[:, 0], samples[:, 1])

下图为Gibbs采样得到的分布图

马氏链,Metropolis-Hastings采样与Gibbs采样的理解(附有python仿真)相关推荐

  1. MCMC中的Metropolis–Hastings算法与吉布斯采样

    Metropolis–Hastings算法是一种具体的MCMC方法,而吉布斯采样(Gibbs Sampling)是Metropolis–Hastings算法的一种特殊形式.二者在机器学习中具有重要作用 ...

  2. 【随机过程】14 - 离散时间马氏链与转移概率

    离散时间马尔科夫链与转移概率 文章目录 离散时间马尔科夫链与转移概率 1. 马尔科夫性的引入 2. 马尔科夫性与马尔科夫链 2.1 定义 2.2 马尔科夫性的解读 2.3 马尔科夫性的扩展 2.3.1 ...

  3. 数学建模(六) 主成分分析,聚类分析,对策论,马氏链

    全并到一起写是因为我只想写十篇. 1.主成分分析 PCA!!! 主成分分析(Principal Component Analysis, PCA),将多个变量通过线性变换以选出较少个数重要变量的一种多元 ...

  4. [学习笔记]马氏链模型

    引例: (带有反射壁的随机徘徊)如果在原点右边距离原点一个单位及距原点 s(s > 1)个单位处各立一个弹性壁.一个质点在数轴右半部从距原点两个单位处开始随机徘徊.每次分别以概率 p(0 < ...

  5. 有趣的马氏链及其平稳分布

    备注:参考LDA数学八卦讲述很详细,有需要的可以自行下载 马氏链的数学定义如下: P(Xt+1=x|Xt,Xt−1,⋯)=P(Xt+1=x|Xt) 假设当前这一代人处在下层.中层.上层的人的比例是概率 ...

  6. 【老生谈算法】matlab实现马氏链算法源码——马氏链

    matlab马氏链代码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab马氏链代码.docx 2.算法详解: 1. ...

  7. 齐次马氏链的性质(详解)

    目录 一.齐次马氏链和一般马氏链的区别 二.齐次马氏链的性质 1.计算n步转移矩阵 2.熟悉绝对分布,初始分布,极限分布 3.齐次马氏链的遍历性和平稳性 3.0一个重要定理 3.1遍历性定义 3.2判 ...

  8. 【随机过程】18 - 连续时间马氏链与排队论

    连续时间马尔科夫链与排队论 文章目录 连续时间马尔科夫链与排队论 1. 连续时间马氏链 1.1 概述 1.2 停留时间的分布 1.3 跳变概率 1.3.1 连续时间马氏链CK方程 1.3.2 Q矩阵 ...

  9. 【数学建模】马氏链模型(基本概念+正则链+吸收链)

    马氏链模型(Markov Chain) 对于有随机因素影响的动态系统,系统从这个时期到下个时期的状态按照一定的概率进行转移,并且下个时期的状态只取决于这个时期的状态和转移概率. 无后效性:已知现在,将 ...

最新文章

  1. SharePoint 2013 配置基于AD的Form认证
  2. 3dmax全局材质灯光细分插件_3Dmax渲染Vray渲染提速优化技巧
  3. ms17-010 php版本,那年MS17-010
  4. 【算法竞赛学习】心跳信号分类预测-特征工程
  5. Matlab求矩阵大小
  6. 暑期训练日志----2018.8.23
  7. 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手
  8. python权重初始值设置_如何查看初始权重(即训练前)?
  9. linux系统工程师修改打开文件数限制代码教程。服务器运维技术
  10. 基于quartz的云调度中心实现
  11. 台湾19大IT业营收连衰 全球产业景气警报先兆
  12. 3种Flink State Backed| 你该用哪个?
  13. 微信分享本地视频到朋友圈,收藏或者对话
  14. 透过现象看本质,如何针对用户做好需求分析
  15. 【TIPC】五、Cluster
  16. 网络协会评出十大流氓软件,3721位列榜首
  17. chai.js------使用
  18. 用android怎么做一个机器人,怎样写一个类似ROS的易用的android机器人框架(2)
  19. 51单片机之外部中断方式 ——— INT0 中断
  20. MySQL主从复制原理学习

热门文章

  1. 服务器被攻击了多久恢复?服务器被攻击了怎么处理?
  2. 当当网商品详情API接口(当当商品详情接口,当当商品评论接口,当当商品问答接口,当当抢购价接口,关键词搜索当当网商品接口)代码对接教程
  3. marvell万兆交换机内核编译总结
  4. 史蒂芬·柯维写给年轻人的高效工作秘笈
  5. 网友关于DTV和IPTV的精彩论述
  6. [译]网页移动端SEO权威指南
  7. 肿瘤细胞膜包裹纳米颗粒|MIA-PaCa-2胰腺癌细胞膜纳米金颗粒|使用周期:6-12个月
  8. ALSA子系统(七)------simple_card添加虚拟声卡
  9. 雨量水位监测站 水情监测
  10. AHB-SRAM简单设计之内部模块 sram_core.v