MCMC

article/2025/9/25 6:40:21

背景

给定一个的概率分布 p(x) , 我们希望产生服从该分布的样本。前面介绍过一些随机采样算法(如拒绝采样、重要性采样)可以产生服从特定分布的样本,但是这些采样算法存在一些缺陷(如难以选取合适的建议分布,只适合一元随机变量等)。下面将介绍一种更有效的随机变量采样方法:MCMC 和 Gibbs采样,这两种采样方法不仅效率更高,而且适用于多元随机变量的采样。

如果一定条件下,马尔可夫链可以收敛到平稳分布。一个绝妙的想法是:如果能构造一个转移矩阵为 P 的马尔可夫链,是其平稳分布刚好是 p(x) 。那我们就可以从任何一个初始状态 x0 出发,沿着马尔可夫链转移,得到一个转移序列 x0 , x1 , x2 ,…, xn , xn+1 , xT , 如果马尔可夫链在第 n 布已经收敛,我们就得到了 p(x) 的样本 xn,xn+1xT , 过程如下所示:

  1. 设置 t=0
  2. 生成一个随机状态 u , 设定初始状态 x0=u
  3. 重复
    t=t+1
    根据转移概率 p(xt|xt1) , 采样得到 u
    设置 xt=u
  4. 直到 t=T

这种方法在1953年被 Metropolis 想到了,为了研究粒子系统的平稳性质,Metropolis 考虑了常见的玻尔兹曼分布的采样问题,首次提出了基于马尔可夫链蒙特卡罗的采样方法,即 Metropolis 算法,并在计算机上进行了编程实现。Metropolis 算法是首个普适的采样方法,并启发了一系列MCMC方法,所以人们把它作为随机模拟技术腾飞的起点。Metropolis 的这篇论文被收录在《统计学中的重大突破》,Metropolis 算法当选为二十世纪十个最重要的算法之一。

Metropolis 算法

假定目标概率分布为 p(x) , 我们已经有一个转移矩阵为 Q q(i,j) 表示从状态 i 转移到状态 j 的概率)的马尔可夫链。通常情况下不满足马尔可夫链的细致平稳条件:

p(i)q(i,j)p(j)q(j,i)

所以 p(x) 通常不是这个马尔可夫链的平稳分布。我们可否对该马氏链做一个改造,使得细致平稳条件成立呢?譬如,我们引入一个接受率 α(i,j) , 我们希望:
p(i)q(i,j)α(i,j)=p(j)q(j,i)a(j,i)

取什么样的 α(i,j) 才能让上式成立呢?最简单的,根据对称性,我们可以取
α(i,j)=p(j)q(j,i)
α(j,i)=p(i)q(i,j)

此时细致平稳条件成立:
p(i)q(i,j)α(i,j)q(i,j)=p(j)q(j,i)α(j,i)q(j,i)

于是我们将原来具有转移矩阵 Q 的一个普通的马氏链,改造成了具有转移矩阵 Q q(i,j) 表示从状态 i 转移到状态 j 的概率)的马氏链。而此马氏链的平稳分布刚好就是目标概率分布 p(x)

这里写图片描述

接受率 α(i,j) 的理解

由于 α(i,j)=p(j)q(j,i)1 ,因此

jSq(i,j)=jSq(i,j)α(i,j)jSq(i,j)=1
索引矩阵 Q 不满足马尔可夫链状态转移矩阵的条件,因而不能直接作为马尔可夫链的转移矩阵。

细致平稳条件的直观含义如下图所示:

这里写图片描述

一般介绍MCMC的资料中没有说明状态自我转移永远是满足细致平稳条件的,自己转给自己,当然转入和转出相等。 因此可以增加自我转移的概率 q(i,i) ,使 jSq(i,j)=1 成立 。Metropolis算法细致平稳条件如下图所示:

这里写图片描述

从以上分析可以发现, α(i,j) 表示在原来转移矩阵为 Q 的马氏链中,从状态 i 以概率 q(i,j) 转移到状态 j 的时候,我们以 α(i,j) 接受这个转移。而以概率 q(i,j)(1α(i,j)) 拒绝这个转移(进行自我转移)。因此称 α 为接受率。

Metropolis算法流程

假定目标分布为 p(x) ,我们已经有了一个转移矩阵为 Q (对应元素为 q(i,j) ),经典MCMC算法流程如下所示
这里写图片描述

以上分析中 p(x) , q(x|y) 说的都是离散的情形,事实上即便这两个分布式连续的,以上算法仍然有效(此时 p(x) 表示概率密度, q(x|y) 表示条件概率密度),因此可以生成服从连续的概率分布 p(x) 的样本。

注:MCMC算法是以于马尔可夫链为基础的。马尔可夫链通常研究的是时间和状态都是离散的随机过程。而连续分布实际上对应的状态是连续的。那么MCMC算法可以对连续分布进行采样的原因又是什么??

Metropolis-Hastings 算法

以上的Metropolis采样算法已经能漂亮地工作了,不过它有个小问题:马氏链在转移的过程中的接受率 α(i,j) 可能偏小,采样过程中容易原地踏步(自我转移),拒绝大量的跳转。这会导致马氏链收敛到稳态分布需要很长的时间。有没有办法提升接受率呢?

假设在Metropolis算法中 α(i,j)=0.1 α(j,i)=0.2 ,满足细致平稳条件,下式成立:

p(i)q(i,j)×0.1=p(j)q(j,i)×0.2

将上式两边同时扩大5倍
p(i)q(i,j)×0.5=p(j)q(j,i)×1

看!我们将接受率 α(i,j) α(j,i) 放大了5倍,而细致平稳条件仍然成立!这启发 我们可以把接受率 α(i,j) α(j,i) 同比例放大,最优的情况是使得两个数中较大的一个放大到1(因为接受率要求小于等于1)。所以我们可以取
α(i,j)=min{p(j)q(j,i)p(i)q(i,j),1}

于是,通过对Metropolis算法中的接受率的微小改造,我们就得到了如下教科书中最常见的Metropolis-Hastings 算法。

这里写图片描述

注:对未归一化的概率分布 p(x)=p~(x)Xp ( Xp 未知)。MH算法仍然适用。只需将 Algorithm 6 中的接受率可变换为:

α(xt,y)=min{p(y)q(xt|y)p(xt)p(y|xt),1}=min{p~(y)q(xt|y)p~(xt)p(y|xt),1}
可以发现接受率 α 与归一化常数无关!

例子

采用 MH算法生成服从Cauchy分布的样本。MH算法采样的过程如下所示:

当前的状态为 xt
这里写图片描述

利用建议分布(这里使用正态分布)进行采样得到 y
这里写图片描述

若接受转移,则 xt+1=y
这里写图片描述

matlab代码如下:

%%M-H算法
T = 500;  %the maximum number of iterations
sigma = 1;%the deviation of normal proposal density
x_min=-10; x_max=10   %define a range for starting values
x = zeros(1,T);%init storage space for our samples
seed=1; rand('state',seed); randn('state',seed);    %random seed
x(1) = unifrnd(x_min,x_max);%%Start sampling
t=1;
while t<T   %Iterate until we have T samplest=t+1;%propose a new value for theta using a normal proposal densityy = normrnd(x(t-1),sigma);%Calculate the acceptance ratioalpha = min([1,(cauchy(y)*normpdf(x(t-1),y,sigma))/(cauchy(x(t-1))*normpdf(y,x(t-1),sigma))]);%draw a uniform deviate from [0,1]u=rand;%accept this proposal?if u<alphax(t)=y;elsex(t)=x(t-1);end
end%%  Display histogram of our samples
figure(1); clf;
subplot(3,1,1);
nbins=200;
thetabins = linspace(x_min,x_max,nbins);
counts = hist(x,thetabins);
bar(thetabins,counts/sum(counts),'k');
xlim([x_min x_max]);
xlabel('x'); ylabel('p(x)');%% Overlay the theoretical density
y=cauchy(thetabins);
hold on;
plot(thetabins,y/sum(y),'r--','LineWidth',3);
set(gca,'YTick',[]);%% Display history of our samples
subplot(3,1,2:3);
stairs(x,1:T,'k-');
ylabel('t');xlabel('x');
set(gca,'YDir','reverse');
xlim([x_min x_max]);

实验结果:
这里写图片描述

参考文献

随机采样方法整理与讲解(MCMC、Gibbs Sampling等
MCMC方法的理解
Computational Statistics with Matlab


http://chatgpt.dhexx.cn/article/OdJwpnPQ.shtml

相关文章

Mac’s Homebrew

黄金三问&#xff1a;what&#xff0c;why&#xff0c;how macOS&#xff08;或 Linux&#xff09;缺失的软件包的管理器 — Homebrew 官网的说明文档会详细告诉我们。 一&#xff1a;查看Homebrew是否安装下载&#xff1a; 终端输入命令行brew &#xff08;1&#xff09;当…

MEC

MEC&#xff08;Multi-access/Mobile Edge Computing&#xff0c;多接入移动边缘计算&#xff09;是ETSI&#xff08;European Telecommunications Standards Institute&#xff0c;欧洲电信标准化协会&#xff09;提出的边缘计算用于移动通信网络的概念。在边缘计算&#xff0…

Metabolomics

样本选择 血浆 Blood Plasma 血浆主要作用运载血细胞&#xff0c;运输维持人体生命活动所需物质和体内废物等。血浆相当于结缔组织的细胞间质。血浆是血液重要组成部分&#xff0c;呈淡黄色液体&#xff08;因含有胆红素&#xff09;。血浆的化学成分水分占90~92%&#xff0c;其…

MACE

作者&#xff1a;无用 QQ&#xff1a;929994365 MACE 目录 介绍 环境搭建 实例运行 一、简介&#xff08;Introduction&#xff09; MACE&#xff08;移动AI计算引擎&#xff09;是一种针对移动异构计算平台优化的深度学习推理框架。MACE覆盖了常见的移动端计算设备&#x…

操作系统:Win10如何彻底卸载自带的Flash软件

Win10操作系统中&#xff0c;Flash功能是系统自带的&#xff0c;我们无法直接通过应用管理来找到Flash&#xff0c;所以也不能从系统设置或者控制面板中卸载它。当然如果你是后期自己安装的话&#xff0c;可以通过控制面板找到Flash然后直接卸载它。 Flash的路径为“C:\Windows…

Hadoop应用案例分析

hadoop是什么?hadoop能有哪些应用?hadoop和大数据是什么关系?下面我们将围绕这几个问题详细阐述。 hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行…

Hadoop 大数据技术原理与应用

Hadoop 大数据技术原理与应用 大数据概述 定义 特征 大量&#xff0c;多样&#xff0c;高速&#xff0c;价值 研究意义 应用场景 医疗&#xff0c;金融&#xff0c;零售 Hadoop 概述 历史 优势 扩容能力强&#xff0c;成本低&#xff0c;高效率&#xff0c;可靠性&a…

大数据-Hadoop应用

一、初识Hadoop 以一个小故事解释什么是Hadoop&#xff1a; 小明接到一个任务&#xff1a;计算一个100M的文本文件中的单词的个数&#xff0c;这个文本文件有若干行&#xff0c;每行有若干个单词&#xff0c;每行单词与单词之间均以空格键隔开。对于处理这种100M量级数据的计…

Spark应用场景以及与hadoop的比较

Spark应用场景以及与hadoop的比较 一、大数据的四大特征: a.海量的数据规模(volume) b.快速的数据流转和动态的数据体系(velocity) c.多样的数据类型(variety) d.巨大的数据价值(value) 二.Spark 和 Hadoop的不同 Spark是给予map reduce 算法实现的分布式计算,拥有Ha…

Hadoop、Storm和Spark主流分布式系统特点和应用场景

最初我们来到这个世界&#xff0c;是因为不得不来&#xff1b;最终我们离开这个世界&#xff0c;是因为不得不走。——《余华作品集》 1、概述 大数据现在是业内炙手可热的话题&#xff0c;随着技术的发展&#xff0c;如HDFS&#xff0c;大数据存储技术已经不在是难点&#xff…

Hadoop大数据分析应用场景

J 为了满足日益增长的业务变化&#xff0c;京东的京麦团队在京东大数据平台的基础上&#xff0c;采用了hadoop等热门的开源大数据计算引擎&#xff0c;打造了一款为京东运营和产品提供决策性的数据类产品-北斗平台。 一、Hadoop的应用业务分析 大数据是不能用传统的计算技术处理…

Hadoop:MapReduce应用

文章目录 一、Join多种应用1.1 Reduce Join1.2 Map Join 二、计数器应用三、数据清洗(ETL)四、MapReduce开发总结 一、Join多种应用 1.1 Reduce Join Reduce Join工作原理&#xff1a; Map端的主要工作&#xff1a;为来自不同表&#xff08;文件&#xff09;的key/value对打…

大数据分析项目实例:Hadoop数据分析应用场景

对于海量数据价值的挖掘&#xff0c;需要通过大数据分析来实现&#xff0c;而这些数据由于具有不同于传统数据的新特征&#xff0c;传统的数据分析技术和工具都不能高效的进行处理&#xff0c;因而才有了基于大数据技术平台进行大数据分析的需求。今天&#xff0c;我们以Hadoop…

Hadoop常见场景

本篇文章主要列举一些Hadoop常用场景 ​ 主要是以下几种 ​ 高可用集群 ​ 节点新增/减少/拉黑 ​ HDFS数据迁移 ​ 大量小文件存储 ​ 高可用集群 ​ 一句话概括 双namenode消除单点故障 ​ 过程&#xff1a; ​ 对active Namenode进行的任何操作&#xff0c;都会同…

Hadoop的优势及大数据平台系统架构典型行业应用场景

扩容能力强&#xff1a;Hadoop可以部署在数百台并行运行的廉价服务器集群&#xff0c;能提供成百上千TB的数据节点上运行的高度可扩展的存储与计算平台。 成本低&#xff1a;Hadoop可以通过普通廉价的服务器集群分布式处理数据&#xff0c;从而降低成本。 高效率&#xff1a;…

大数据利器:Hadoop的十大应用场景[转]

【IT168 评论】谁在用Hadoop?这是个问题。在大数据背景下&#xff0c;Apache Hadoop已经逐渐成为一种标签性&#xff0c;业界对于这一开源分布式技术的了解也在不断加深。但谁才是Hadoop的最大用户呢?首先想到的当然是它的“发源地”&#xff0c;像Google这样的大型互联网搜索…

金三银四、金九银十 面试宝典 Spring、MyBatis、SpringMVC面试题 超级无敌全的面试题汇总(超万字的面试题,让你的SSM框架无可挑剔)

Spring、MyBatis、SpringMVC 框架 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里…

Spring 常见面试题

目录 Spring 基础 1、什么是 Spring 框架? 2、Spring 包含的模块有哪些&#xff1f; 3、Spring,Spring MVC,Spring Boot 之间什么关系? Spring IoC 4、谈谈自己对于 Spring IoC 的了解 5、什么是 Spring Bean&#xff1f; 6、将一个类声明为 Bean 的注解有哪些? 7、…

Spring框架常见面试题

1. 你对Spring框架的理解(特点)&#xff1f; Spring框架有哪些模块 &#xff1f; Spring&#xff0c;一种用来简化企业应用级开发的一种开源框架。简化开发&#xff1a;它对常用的API做了封装&#xff0c;比如对JDBC的封装&#xff0c;使用Spring JDBC访问数据库&#xff0c;就…

【面试】Spring面试题

文章目录 Spring概述什么是spring?Spring的俩大核心概念Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么Spring的优缺点是什么&#xff1f;Spring有哪些应用场景Spring由哪些模块组成&#xff1f;Spring 框架中都用到了哪些设计模式&#xff1f;详细讲解一…