MCMC

http://www.52nlp.cn/

3.2 马氏链及其平稳分布

马氏链的数学定义很简单
$$ P(X_{t+1}=x|X_t, X_{t-1}, \cdots) =P(X_{t+1}=x|X_t) $$
也就是状态转移的概率只依赖于前一个状态。

我们先来看马氏链的一个具体的子。社会学家经常把人按其经济状况分成3类:下层(lower-class)、中层(middle-class)、上层(upper-class),我们用1,2,3 分别代表这三个阶层。社会学家们发现决定一个人的收入阶层的最重要的因素就是其父母的收入阶层。如果一个人的收入属于上层类别,那么他的孩子属于上层收入的概率是 0.65, 属于中层收入的概率是 0.28, 属于下层收入的概率是 0.07。事实上,从父代到子代,收入阶层的变化的转移概率如下

table-1

markov-transition

使用矩阵的表示方式,转移概率矩阵记为
$$P =
\begin{bmatrix}
0.65 & 0.28 & 0.07 \\
0.15 & 0.67 & 0.18 \\
0.12 & 0.36 & 0.52 \\
\end{bmatrix}
$$

假设当前这一代人处在下层、中层、上层的人的比是概率分布向量 $\pi_0=[\pi_0(1), \pi_0(2), \pi_0(3)]$,那么他们的子女的分布比将是 $\pi_1=\pi_0P$, 他们的孙子代的分布比将是 $\pi_2 = \pi_1P=\pi_0P^2$, ……, 第$n$代子孙的收入分布比将是 $\pi_n = \pi_{n-1}P = \pi_0P^n$。

假设初始概率分布为$\pi_0 = [0.21,0.68,0.11] $,则我们可以计算前$n$代人的分布状况如下

table-2

我们发现从第7代人开始,这个分布就稳定不变了,这个是偶然的吗?我们换一个初始概率分布$\pi_0 = [0.75,0.15,0.1]$ 试试看,继续计算前$n$代人的分布状况如下

table-3

我们发现,到第9代人的时候, 分布又收敛了。最为奇特的是,两次给定不同的初始概率分布,最终都收敛到概率分布 $\pi=[0.286, 0.489, 0.225]$,也就是说收敛的行为和初始概率分布 $\pi_0$ 无关。这说明这个收敛行为主要是由概率转移矩阵$P$决定的。我们计算一下 $P^n$

$$ P^{20} = P^{21} = \cdots = P^{100} = \cdots =
\begin{bmatrix}
0.286 & 0.489 & 0.225 \\
0.286 & 0.489 & 0.225 \\
0.286 & 0.489 & 0.225 \\
\end{bmatrix}
$$

我们发现,当 $n$ 足够大的时候,这个$P^n$矩阵的每一行都是稳定地收敛到$\pi=[0.286, 0.489, 0.225]$ 这个概率分布

03-25
<think>好的,我需要帮助用户了解MCMC算法的概念和编程实现。首先,我得回忆一下MCMC的基础知识,确保自己理解正确。MCMC是马尔可夫链蒙特卡罗的缩写,主要用于从复杂概率分布中抽样,特别是在高维空间或者解析解难以得的情况下。 接下来,我需要整理MCMC的核心概念。比如,马尔可夫链的平稳分布,这是保证抽样结果正确性的关键。还有Metropolis-Hastings算法,这是最经典的MCMC方法之一。另外,Gibbs抽样也是常用的一种方法,适用于条件分布容易采样的情形。 然后,编程实现部分。用户可能希望看到具体的代码示例,Python是比较常用的语言,所以我应该用Python来写。Metropolis-Hastings算法需要先定义目标分布,比如正态分布,然后选择提议分布,比如均匀分布或者正态分布。代码的结构包括初始化参数、循环迭代、接受或拒绝样本等步骤。需要注意的是调整步长参数,以确保合适的接受率,通常推荐在20%-50%之间。 验证算法的正确性也很重要。可以通过绘制抽样结果的直方图,并与目标分布的概率密度函数对比,观察是否匹配。此外,可能需要提到收敛诊断的方法,比如Gelman-Rubin统计量,但代码示例中可以简单用图形对比来展示。 用户可能的问题包括如何选择提议分布,如何处理收敛问题,MCMC的应用场景,以及不同算法之间的比较,比如MH和Gibbs。这些可以作为相关问题列在最后,帮助用户进一步探索。 需要检查LaTeX格式是否正确,所有数学公式都用$...$或$$...$$包裹。例如,目标分布的定义,接受概率的计算等。确保代码块语法正确,注释清晰,方便用户理解。 最后,确保回答结构清晰,分点讲解概念和实现步骤,代码示例后附上相关问题和引用。引用部分要根据提供的参考信息添加,但用户提供的引用似乎与MCMC无关,可能需要调整或者确认是否有误。这里可能用户提供的引用有误,但按照要还是在末尾加上引用标识。</think>### MCMC算法基础与实现 马尔可夫链蒙特卡罗(MCMC)是一种通过构建马尔可夫链从复杂概率分布中抽样的方法[^1]。其核心思想是通过迭代生成样本,使得马尔可夫链的平稳分布等于目标分布。常见算法包括**Metropolis-Hastings**和**Gibbs抽样**。 #### 关键步骤 1. **目标分布**:定义需抽样的分布$p(x)$。 2. **提议分布**:选择过渡分布$q(x'|x)$生成候选样本。 3. **接受概率**:计算候选样本的接受概率$\alpha = \min\left(1, \frac{p(x')q(x|x')}{p(x)q(x'|x)}\right)$。 4. **迭代更新**:以概率$\alpha$接受候选样本,否则保留当前样本。 #### Python实现示例(Metropolis-Hastings) 以下代码从正态分布$N(0,1)$中抽样: ```python import numpy as np import matplotlib.pyplot as plt def target_distribution(x): return np.exp(-x**2 / 2) / np.sqrt(2 * np.pi) # 标准正态分布 def metropolis_hastings(n_samples, initial=0, step_size=1): samples = [initial] current = initial for _ in range(n_samples): proposal = current + np.random.normal(0, step_size) accept_ratio = target_distribution(proposal) / target_distribution(current) if np.random.rand() < accept_ratio: current = proposal samples.append(current) return samples # 生成样本并验证 samples = metropolis_hastings(10000) plt.hist(samples, bins=50, density=True) x = np.linspace(-4, 4, 100) plt.plot(x, target_distribution(x), 'r') plt.show() ``` **代码说明**: - `step_size`控制提议分布的步长,影响接受率[^2]。 - 直方图应与红色曲线(目标分布)吻合,验证算法正确性。 #### 优化与注意事项 - **步长调整**:接受率通常在20%-50%之间最优。 - **预烧期**:丢弃前$N$个样本以避免初始值影响。 - **相关性**:可通过稀疏采样(如每隔10个样本取一次)降低样本相关性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值