马氏链,Metropolis-Hastings采样与Gibbs采样的理解(附有python仿真)
文章目录
- 马氏链
- 原理
- 采样方法
- 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仿真)相关推荐
- MCMC中的Metropolis–Hastings算法与吉布斯采样
Metropolis–Hastings算法是一种具体的MCMC方法,而吉布斯采样(Gibbs Sampling)是Metropolis–Hastings算法的一种特殊形式.二者在机器学习中具有重要作用 ...
- 【随机过程】14 - 离散时间马氏链与转移概率
离散时间马尔科夫链与转移概率 文章目录 离散时间马尔科夫链与转移概率 1. 马尔科夫性的引入 2. 马尔科夫性与马尔科夫链 2.1 定义 2.2 马尔科夫性的解读 2.3 马尔科夫性的扩展 2.3.1 ...
- 数学建模(六) 主成分分析,聚类分析,对策论,马氏链
全并到一起写是因为我只想写十篇. 1.主成分分析 PCA!!! 主成分分析(Principal Component Analysis, PCA),将多个变量通过线性变换以选出较少个数重要变量的一种多元 ...
- [学习笔记]马氏链模型
引例: (带有反射壁的随机徘徊)如果在原点右边距离原点一个单位及距原点 s(s > 1)个单位处各立一个弹性壁.一个质点在数轴右半部从距原点两个单位处开始随机徘徊.每次分别以概率 p(0 < ...
- 有趣的马氏链及其平稳分布
备注:参考LDA数学八卦讲述很详细,有需要的可以自行下载 马氏链的数学定义如下: P(Xt+1=x|Xt,Xt−1,⋯)=P(Xt+1=x|Xt) 假设当前这一代人处在下层.中层.上层的人的比例是概率 ...
- 【老生谈算法】matlab实现马氏链算法源码——马氏链
matlab马氏链代码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab马氏链代码.docx 2.算法详解: 1. ...
- 齐次马氏链的性质(详解)
目录 一.齐次马氏链和一般马氏链的区别 二.齐次马氏链的性质 1.计算n步转移矩阵 2.熟悉绝对分布,初始分布,极限分布 3.齐次马氏链的遍历性和平稳性 3.0一个重要定理 3.1遍历性定义 3.2判 ...
- 【随机过程】18 - 连续时间马氏链与排队论
连续时间马尔科夫链与排队论 文章目录 连续时间马尔科夫链与排队论 1. 连续时间马氏链 1.1 概述 1.2 停留时间的分布 1.3 跳变概率 1.3.1 连续时间马氏链CK方程 1.3.2 Q矩阵 ...
- 【数学建模】马氏链模型(基本概念+正则链+吸收链)
马氏链模型(Markov Chain) 对于有随机因素影响的动态系统,系统从这个时期到下个时期的状态按照一定的概率进行转移,并且下个时期的状态只取决于这个时期的状态和转移概率. 无后效性:已知现在,将 ...
最新文章
- SharePoint 2013 配置基于AD的Form认证
- 3dmax全局材质灯光细分插件_3Dmax渲染Vray渲染提速优化技巧
- ms17-010 php版本,那年MS17-010
- 【算法竞赛学习】心跳信号分类预测-特征工程
- Matlab求矩阵大小
- 暑期训练日志----2018.8.23
- 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手
- python权重初始值设置_如何查看初始权重(即训练前)?
- linux系统工程师修改打开文件数限制代码教程。服务器运维技术
- 基于quartz的云调度中心实现
- 台湾19大IT业营收连衰 全球产业景气警报先兆
- 3种Flink State Backed| 你该用哪个?
- 微信分享本地视频到朋友圈,收藏或者对话
- 透过现象看本质,如何针对用户做好需求分析
- 【TIPC】五、Cluster
- 网络协会评出十大流氓软件,3721位列榜首
- chai.js------使用
- 用android怎么做一个机器人,怎样写一个类似ROS的易用的android机器人框架(2)
- 51单片机之外部中断方式 ——— INT0 中断
- MySQL主从复制原理学习
热门文章
- 服务器被攻击了多久恢复?服务器被攻击了怎么处理?
- 当当网商品详情API接口(当当商品详情接口,当当商品评论接口,当当商品问答接口,当当抢购价接口,关键词搜索当当网商品接口)代码对接教程
- marvell万兆交换机内核编译总结
- 史蒂芬·柯维写给年轻人的高效工作秘笈
- 网友关于DTV和IPTV的精彩论述
- [译]网页移动端SEO权威指南
- 肿瘤细胞膜包裹纳米颗粒|MIA-PaCa-2胰腺癌细胞膜纳米金颗粒|使用周期:6-12个月
- ALSA子系统(七)------simple_card添加虚拟声卡
- 雨量水位监测站 水情监测
- AHB-SRAM简单设计之内部模块 sram_core.v