马尔科夫蒙特卡洛_吉布斯抽样算法(Markov Chain Monte Carlo(MCMC)_Gibbs Sampling)

定义

输入:目标概率分布的密度函数 p ( x ) p(x) p(x),函数 f ( x ) f(x) f(x)

输出: p ( x ) p(x) p(x)的随机样本 x m + 1 , x m + 2 , ⋯ , x n x_{m+1},x_{m+2},\cdots,x_n xm+1,xm+2,,xn,函数样本均值 f m n f_{mn} fmn;

参数:收敛步数 m m m,迭代步数 n n n

(1)初始化。给出初始样本 x 0 = ( x 1 ( 0 ) , x 2 ( 0 ) , ⋯ , x k ( 0 ) ) T x^{0} = ( x_1^{(0)},x_2^{(0)},\cdots,x_k^{(0)} )^T x0=(x1(0),x2(0),,xk(0))T

(2)对i循环执行

设第 ( i − 1 ) (i-1) (i1)次迭代结束时的样本为 x ( i − 1 ) = ( x 1 ( i − 1 ) , x 2 ( i − 1 ) , ⋯ , x k ( i − 1 ) ) T x^{(i-1)} = (x_1^{(i-1)},x_2^{(i-1)},\cdots,x_k^{(i-1)})^T x(i1)=(x1(i1),x2(i1),,xk(i1))T,则第 i i i次迭代进行如下几步操作:

{ ( 1 ) 由满足条件分布 p ( x 1 ∣ x 2 ( i ) , ⋯ , x k ( i − 1 ) ) 抽取 x 1 ( i ) ⋮ ( j ) 由满足条件分布 p ( x j ∣ x 1 ( i ) , ⋯ , x j − 1 ( i ) , x j + 1 ( i ) , ⋯ , x k ( i − 1 ) ) 抽取 x j ( i ) ⋮ ( k ) 由满足条件分布 p ( x k ∣ x 1 ( i ) , ⋯ , x ( k − 1 ) ( i ) 抽取 x k ( i ) \begin{cases} (1)由满足条件分布p(x_1|x_2^{(i)},\cdots,x_k^{(i-1)})抽取x_1^{(i)}\\ \vdots \\ (j)由满足条件分布p(x_j|x_1^{(i)},\cdots,x_{j-1}^{(i)},x_{j+1}^{(i)},\cdots,x_k^{(i-1)})抽取x_j^{(i)} \\ \vdots \\ (k)由满足条件分布p(x_k|x_1^{(i)},\cdots,x_{(k-1)}^(i)抽取x_k^{(i)} \end{cases} (1)由满足条件分布p(x1x2(i),,xk(i1))抽取x1(i)(j)由满足条件分布p(xjx1(i),,xj1(i),xj+1(i),,xk(i1))抽取xj(i)(k)由满足条件分布p(xkx1(i),,x(k1)(i)抽取xk(i)

得到第 i i i次迭代值 x ( i ) = ( x 1 ( i ) , x 2 ( i ) , ⋯ , x k ( i ) ) T x^{(i)} = (x_1^{(i)},x_2^{(i)},\cdots,x_k^{(i)})^T x(i)=(x1(i),x2(i),,xk(i))T
(3)得到样本集合
{ x ( m + 1 ) , x ( m + 2 ) , ⋯ , x ( n ) } \{ x^{(m+1)},x^{(m+2)},\cdots,x^{(n)} \} {x(m+1),x(m+2),,x(n)}
(4)计算
f m n = 1 n − m ∑ i = m + 1 n f ( x ( i ) ) f_{mn} = \frac{1}{n-m}\sum_{i=m+1}^n f(x^{(i)}) fmn=nm1i=m+1nf(x(i))

import numpy as np
from matplotlib import pyplot as plt
from scipy.stats import gaussian_kdedef gibbs_sampling(dim, conditional_sampler, x0=None, burning_steps=1000, max_steps=10000, epsilon=1e-8, verbose=False):"""给定一个从p(x_j|x_1,x_2,…x_n)采样的条件采样器返回样本x~p的列表,其中p是条件分布的原始分布。x0是x的初始值。如果未指定,则将其设置为零向量。条件采样器将(x,j)作为参数"""x = np.zeros(dim) if x0 is None else x0samples = np.zeros([max_steps - burning_steps, dim])for i in range(max_steps):for j in range(dim):x[j]  = conditional_sampler(x, j)if verbose:print("New value of x is", x_new)if i >= burning_steps:samples[i - burning_steps] = xreturn samplesif __name__ == '__main__':i = 0def demonstrate(dim, p, desc, **args):samples = gibbs_sampling(dim, p, **args)z = gaussian_kde(samples.T)(samples.T)plt.scatter(samples[:, 0], samples[:, 1], c=z, marker='.')plt.plot(samples[: 100, 0], samples[: 100, 1], 'r-')plt.title(desc)plt.savefig(str(i)+".png")plt.show()# example 1:mean = np.array([2, 3])covariance = np.array([[1, 0],[0, 1]])covariance_inv = np.linalg.inv(covariance)det_convariance = 1def gaussian_sampler1(x, j):return np.random.normal()demonstrate(2, gaussian_sampler1, "Gaussian distribution with mean of 2 and 3")# example 2:mean = np.array([2, 3])covariance = np.array([[1, 0],[0, 1]])covariance_inv = np.linalg.inv(covariance)det_convariance = 1def gaussian_sampler2(x, j):if j == 0:return np.random.normal(2)else:return np.random.normal(3)demonstrate(2, gaussian_sampler2, "Gaussian distribution with mean of 2 and 3")# example 3:def blocks_sampler(x, j):sample = np.random.random()if sample > .5:sample += 1.return sampledemonstrate(2, blocks_sampler, "Four blocks")# example 4:def blocks_sampler(x, j):sample = np.random.random()if sample > .5:sample += 100.return sampledemonstrate(2, blocks_sampler, "Four blocks with large gap.")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143382.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

camtasia2024绿色免费安装包win+mac下载含2024最新激活密钥

Hey, hey, hey!亲爱的各位小伙伴,今天我要给大家带来的是Camtasia2024中文版本,这款软件简直是视频制作爱好者的福音啊! camtasia2024绿色免费安装包winmac下载,点击链接即可保存。 先说说这个版本新加的功能吧&#…

小微金融企业系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,贷款信息管理,贷款申请管理,贷款种类管理,代办项目管理,项目分类管理 微信端账号功能包括:系统首页,代办项…

如何做好网站建设,多个维度解析一下

网站建设是一个复杂的过程,涉及多个方面的考虑。以下是一些关键步骤和最佳实践,帮助你做好网站建设: 1. 明确目标与定位 确定网站目标:明确你的网站是用于品牌宣传、产品销售、信息分享还是其他目的。分析受众群体:了…

LeetCode_sql_day27(1225.报告系统状态的连续信息)

目录 描述: 1225.报告系统状态的连续信息 数据准备: 分析: 代码: 总结: 描述: 1225.报告系统状态的连续信息 表:Failed ----------------------- | Column Name | Type | ----------…

机器狗与无人机空地协调技术分析

随着科技的飞速发展,机器狗与无人机作为智能机器人领域的杰出代表,正逐步在军事侦察、灾害救援、环境监测、农业植保等多个领域展现出巨大的应用潜力。本文旨在深入探讨机器狗与无人机之间的空地协调技术,分析其在复杂环境中的协同作业机制、…

neo4j安装启动教程+对应的jdk配置

参考这位博主的视频教程:neo4j社区windows版下载 一、官网下载neo4j的安装包 (1)官网下载页面 (2)上一步 【download】之后,会自动下载,如果没有,点击【here】 这里可以看到一行字…

TypeScript —枚举的应用

枚举的关键字:enum 语法:enum 枚举名{选项} enum Sex{boy男,girl女 } 如何使用枚举中的属性 enum Sex{boy男,girl女 }function a2(sex:Sex){console.log(张三的性别是:${sex}) } a2(Sex.boy) 运行结果: 枚举的作用 1.提高代码可读性&a…

fmql之ubuntu联网

需求:fmql搭载linux,并且可以远程访问。 连路由器 板卡通过网线与路由器连接,ip设置成同段,可以ping通: 但是ping不通baidu(如果路由器没有网/流量的话,就无法上网) ZYNQ7020通过网…

基于vue框架的宠物托管系统设计与实现is203(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,宠物种类,商家,咨询商家,用户宠物,宠物托管,宠物状况,宠物用品,用品分类,商家公告,结束托管,账单信息,延长托管 开题报告内容 基于Vue框架的宠物托管系统设计与实现开题报告 一、引言 随着现代生活节奏的加快,越来越…

php医院预约挂号系统小程序 LW PPT源码调试讲解

第二章 开发技术与环境配置 2.1 Php语言简介 PHP,原名Hypertext Preprocessor。它是属于内嵌式语言,在服务器上执行嵌入HTML的脚本语言,有点像C语言的风格,运用的比较广泛。Hypertext Preprocessor混合了 Perl 、C、Java和自己创…

Python基础(七)——PyEcharts数据分析(面向对象版)

四、使用PyEcharts数据分析案例(面向对象版) 【前言:为了巩固之前的Python基础知识(一)到(五),并为后续使用Python作为数据处理的好帮手,我们一起来用面向对象的思想来理…

计算机毕业设计 二手图书交易系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Leetcode Hot 100刷题记录 -Day17(搜索二维矩阵II)

搜索二维矩阵II 问题描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,…

【PSINS工具箱】仅速度为观测量的SINS/GNSS组合导航,MATLAB源代码,无需下载,可直接复制

工具箱 本程序需要在安装工具箱后使用,工具箱是开源的,链接:http://www.psins.org.cn/kydm 程序简述 原文的153组合导航是SINS/GPS下的位置观测或位置+速度观测,本文所述的代码是仅三轴位置观测的,使用UKF来滤波。 最后输出速度对比、速度误差、姿态对比、姿态误差、位…

Gwork企业微办公管理系统:企业管理的多面手

Gwork企业微办公管理系统:企业管理的多面手 在企业信息化管理的道路上,你是否还在为繁琐的系统集成和复杂的业务流程头疼?Gwork企业微办公管理系统也许就是你正在寻找的那个得力助手。本文将带你了解Gwork的核心功能及其如何帮助企业提升工作…

【Arduino】Arduino使用USB-TTL无法下载程序问题

问题描述 自己绘制了一套基于Arduino MEGA的电路,没有在板子上面绘制CH340的标准下载电路,只保留了UART0的插针用于调试和下载程序。 使用ISP烧录完bootloader后,发现无法使用USB-TTL工具烧录程序 问题解决过程 在网上搜索了相关资料&…

洛谷P2240——贪心算法

贪心算法是好理解的,是简单的,但是困难的可能是结构体的应用,stl的使用等等,下面这道题就体现了这一点。 这道题主要要算单价,通过比较单价来排序,并计算。 如果单开数组,排完单价,…

ER 图 Entity-Relationship (ER) diagram 101 电子商城 数据库设计

起因, 目的: 客户需求, 就是要设计一个数据库。 过程, 关于工具: UI 设计,我最喜欢的工具其实是 Canva, 但是 Canva 没有合适的模板。我用的是 draw.io, 使用感受是,很垃圾。 各种快捷键不适应,箭头就是点不住&…

【雅特力AT32】串口入门实战:轮询、中断、SWAP(收发管脚交换)功能

本文将会把数据手册结合三个案例讲解,需要看源码可以直接看后面。 但是代码一定要结合中断、收发配置部分来理解,这两部分不建议跳过!!! 串口协议层不再介绍,需要请移步: 【串口通信详解】US…

打通最后一公里:使用CDN加速GitHub Page的访问

无论是互联网从业者还是科研人员,使用Github Page能够很友好的建立个人网站。 目前比较主流的方案是使用GitHub Page托管文字网页,利用GitHub仓库托管图床,稳定可靠(Gitee的page突然撤退,让人不敢再将图床放到上面&am…