MCMC 马尔可夫链蒙特卡洛方法 入门

本文介绍了MCMC方法在贝叶斯统计中的作用,通过马尔可夫链在无法直接计算后验分布时进行近似。讲解了先验分布、可能性分布和后验分布的概念,并阐述了蒙特卡洛模拟的基本原理,用于评估复杂问题的解决方案。MCMC结合蒙特卡洛模拟和马尔可夫链,生成样本以逼近后验分布的统计特性。

本篇文章是对下面这篇文章的改写
https://www.jiqizhixin.com/articles/2017-12-24-6

MCMC 通过在概率空间中随机采样以近似兴趣参数(parameter of interest)的后验分布。注意了,这里不是近似兴趣参数,是近似兴趣参数的后验分布。
兴趣参数,是我们感兴趣的一些数字参数。

分布是每个参数的可能取值,以及我们以多大可能可以观测到这个可能取值。这个是从 proportion 的角度来理解。

在贝叶斯统计中,分布也可以看作是我们对这个参数的信念。这个是从概率统计的另外一种起源来理解。

下面讲讲贝叶斯统计。
先验分布:表征我们对参数信念的分布,它在我们看到任何数据之前捕捉到我们的信念。比如 P(\theta), 这里 \theta 是参数。
可能性分布:伴随着观测值来解释观察数据的可能性。 P(D | \theta)
后验分布:在观测完数据之后,参数 \theta 的分布

贝叶斯定理,说的是,P(\theta | D) 与 P(D | \theta) P(\theta) 成正比。
为什么呢?通过一个条件概率公式就可以得到。但是这里是不是假设 P(D) is a constant 了呢?还希望懂的童鞋能告知一二。

MCMC 允许我们在无法直接计算后验概率解析式的情形下,评估后验分布的形状?(什么是评估后验分布的形状?), 这里将先介绍蒙特卡洛模拟,接着介绍马尔可夫链。
“”“
蒙特卡洛模拟只是一种通过不断地生成随机数来评估固定参数的方法。通过生成随机数并对其做一些计算,蒙特卡洛模拟给出了一个参数的近似值(其中直接计算是不可能的或者计算量过大)。
“”“ 和
“”“
蒙特卡洛模拟不只用于估算复杂形状的面积。通过生成大量随机数字,它还可用于建模非常复杂的过程。实际上,蒙特卡洛模拟还可以预测天气,或者评估选举获胜的概率。
“”“

“”“马尔科夫链由存在概率相关性的事件的序列构成。每个事件源于一个结果集合,根据一个固定的概率集合,每个结果决定了下一个将出现的结果。”“”

“”“马尔科夫链的一个重要特

### 马尔可夫链蒙特卡洛 (MCMC) 方法介绍 #### 定义与基本原理 马尔可夫链蒙特卡洛方法允许估计后验分布的形状,在直接计算不可行的情况下尤为有用[^1]。该方法结合了两种核心概念:蒙特卡洛估计和马尔可夫链。 - **蒙特卡洛估计**涉及利用大量样本平均来逼近难以解析求解的概率密度函数积分。 - **马尔可夫链**则指一种特殊的随机过程,其中下一个状态仅依赖于当前状态而与其他历史状态无关,即满足无记忆性质的一阶齐次特性[^4]。 当两者结合起来形成MCMC时,则可以通过构造特定形式的马尔可夫链来进行复杂概率模型下的参数推断或预测分析。 #### 实现方式 常见的MCMC算法包括但不限于: - Metropolis-Hastings 算法:这是一种通用的方法用于生成服从给定目标分布的新样本点集;它通过接受/拒绝机制决定是否采纳候选转移路径上的新位置作为下一次迭代起点[^3]。 - Gibbs 采样器:适用于多维联合分布情况,每次更新单个维度的同时保持其余部分不变直到完成一轮完整的扫描循环。 这些技术可以被应用于各种编程语言环境之中,比如Python 和 C++ 中都有相应的库支持高效实现上述功能[^5]。 ```cpp // C++ 示例代码片段展示简单的MH算法框架 #include <random> double proposal_distribution(double current_value){ std::normal_distribution<> d(current_value, sigma); return d(engine); } bool accept_or_reject(double proposed_log_prob,double old_log_prob){ double acceptance_ratio = exp(proposed_log_prob-old_log_prob); return ((rand() / static_cast<double>(RAND_MAX))<acceptance_ratio)?true:false; } for(int i=0;i<num_iterations;++i){ auto new_sample = proposal_distribution(old_sample); if(accept_or_reject(log_target(new_sample),log_target(old_sample))){ samples.push_back(new_sample); old_sample=new_sample; }else{ samples.push_back(old_sample); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值