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

news2024/9/23 21:49:13

定义

输入:目标概率分布的密度函数 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_kde


def 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 x0
    samples = 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] = x
    return samples


if __name__ == '__main__':
    i = 0
    def 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 = 1
    def 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 = 1
    def 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 sample
    demonstrate(2, blocks_sampler, "Four blocks")

    # example 4:
    def blocks_sampler(x, j):
        sample = np.random.random()
        if sample > .5:
            sample += 100.
        return sample
    demonstrate(2, blocks_sampler, "Four blocks with large gap.")

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

在这里插入图片描述

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

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

相关文章

【Linux】常用指令(下)(内含more、less、 head、tail、date、find、grep、zip、tar以及学习笔记)

文章目录 前言1. more指令2. less指令(重要)3. head指令4. tail指令5. 管道(做到学会使用即可)6. date指令6.1 时间戳 7. cal指令8. find指令9. grep指令10. zip/unzip指令11. tar指令 前言 Linux下的常用指令终于要在本文落下帷…

如给Excel表格设置保护,防止表格被移动或删除

在日常工作和学习中,Excel表格是我们经常使用的工具之一。然而,在某些情况下,我们可能需要保护Excel工作簿的结构,防止工作表被随意移动或删除,以确保数据的完整性和安全性。下面小编就来给大家详细介绍如何在Excel中设…

J Transl Med结肠癌分子分型+简单实验

目录 技术路线 实验设计(药物敏感性) 亮点 方法 从 TCGA 和 GEO 数据库下载大量和单细胞 RNA 测序以及 CRC 的临床数据。HRGs 和 LMRGs 来自分子特征数据库。使用 R 软件包 DESeq2 进行差异表达分析。使用无监督聚类进行分子亚型。使用单变量 Cox 回…

Hbase日常运维

1 Hbase日常运维 1.1 监控Hbase运行状况 1.1.1 操作系统 1.1.1.1 IO 群集网络IO,磁盘IO,HDFS IO IO越大说明文件读写操作越多。当IO突然增加时,有可能:1.compact队列较大,集群正在进行大量压缩操作。 2.正在执行…

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置 开机,BIOS自检,可以看到设备硬盘信息,以及提示CtrlR进入Raid卡配置界面。 按CtrlR进入Raid卡配置界面,一般来说使用CtrlR进入Raid卡配置界面的Raid卡配置都通用。 …

MySQL—多表操作详解

在 MySQL 中,多表操作通常涉及联接(JOIN)和子查询(Subquery),用于处理来自多个表的数据。 约束分类 约束介绍 约束:用于对数据库表中的数据进行限定,确保数据的正确性、有效性和完…

多普云(DPGO)注册机 贴近摄影测量航线规划软件

一、贴近摄影测量技术 贴近摄影测量,针对精细化测量需求提出的全新摄影测量技术,它是精细化对地观测需求与旋翼无人机发展结合的必然产物。 贴近摄影测量是面向对象的摄影测量,它以物体的“面”为摄影对象,通过贴近摄影获取超高分…

U盘格式化了怎么办?这4个工具能帮你恢复数据。

如果你思维U盘被格式化了,也不用太过担心,其实里面的数据并没有被删除,只是被标记为了可覆盖的状态。只要我们及时采取正确的数据恢复措施,就有很大的机会可以将数据找回。比如使用专业得的数据恢复软件,我也可以跟大家…

Undet for sketchup 2023.3注册机 支持草图大师sketchup2021-2022-2023

1.Undet for sketchup 2023.3支持草图大师sketchup2021-2022-2023。支持机载雷达扫描、车载扫描还是地面扫描,对AEC行业用户来说,真正需要的是如何将这些数据快速处理为三维模型,这样才能将这些信息延展到BIM领域发挥效用。因此面对这些海量的…

c++ 类中特殊成员函数

作业&#xff1a; 仿照string类&#xff0c;自己手动实现 My_string&#xff0c;分文件编译 fun.h代码 #ifndef FUN_H #define FUN_H#include <iostream>using namespace std;class My_string { private:char *ptr; // 指向字符数组的指针int size; // 字符串的最大…

成都睿明智科技有限公司电商服务引领品牌跃升

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多品牌商家竞相追逐的新战场。在这片充满机遇与挑战的领域中&#xff0c;成都睿明智科技有限公司以其专业的抖音电商服务&#xff0c;成为了众多商家信赖的伙伴。今天&#xff0c;…

< 微积分Calculus >

微积分 微分是把整体分拆为小部分来求它怎样改变 积分是把小部分连接在一起来求整体有多大&#xff0c;可以用来求面积、体积、中点和很多其他有用的东西。 lim极限 函数f(x) -> Q(x) y&#xff1a;x变量&#xff0c;f函数&#xff0c;Q(x)函数体&#xff08;多项式&am…

【自动驾驶】控制算法(八)横向控制Ⅳ | 调试与优化——让车辆行驶更平稳!

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

HTML5 Video标签的属性、方法和事件汇总,以及常用视频插件推荐

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

PHP+uniapp微信小程序基于Android系统的旅游攻略系统cxj499

目录 技术栈和环境说明文件解析具体实现截图php技术介绍微信开发者工具HBuilderXuniapp详细视频演示开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试感恩大学老师和同学源码获取 技术栈和环境说明 本系统以PHP语言实现&…

数据结构7—树(顺序存储二叉树—堆)含TOPK问题

1.树 1.1树的概念与结构 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n > 0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#x…

Linux 安装JDK8和卸载

目录 一、下载JDK8的rpm包 二、安装JDK 三、设置环境变量 Linux环境下安装JDK的方式有多种&#xff0c;可以通过rpm包、yum安装或者tar.gz压缩包。本章节会教大家通过前两者方式来安装JDK&#xff0c;压缩包的形式因为下载压缩包后上传到服务器环境下&#xff0c;将压缩包解…

1.6 计算机网络体系结构

参考&#xff1a;&#x1f4d5;深入浅出计算机网络 常见的三种计算机网络体系结构 TCP/IP体系结构 路由器一般只包含网络接口层和网际层。 应用层TCP/IP体系结构的应用层包含了大量的应用层协议&#xff0c;例如HTTP、SMTP、DNS、RTP等运输层TCP和UDP是TCP/IP体系结构运输层的…

召回的在线评估与离线评估

在现代信息检索、推荐系统等应用场景中&#xff0c;召回阶段扮演着至关重要的角色。召回系统负责从海量候选项中筛选出潜在相关的内容&#xff0c;因此其效果直接影响用户的满意度和系统的效率。为了确保召回系统的性能&#xff0c;我们需要对其进行评估&#xff0c;而评估方法…

Python3爬虫教程-HTTP基本原理

HTTP基本原理 1&#xff0c;URL组成部分详解2&#xff0c;HTTP和HTTPS3&#xff0c;HTTP请求过程4&#xff0c;请求&#xff08;Request&#xff09;请求方法&#xff08;Request Method&#xff09;请求的网址&#xff08;Request URL&#xff09;请求头&#xff08;Request H…