python实现重要性采样正态分布
时间: 2024-08-14 16:08:26 浏览: 65
在Python中,重要性采样通常用于估计难以直接抽样的概率密度函数(PDF)。对于正态分布,我们假设目标PDF为 \( f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \),其中 \( \mu \) 是均值,\( \sigma \) 是标准差。
重要性采样涉及到从一个更容易抽样的分布,比如均匀分布或另一个正态分布,生成样本,并根据目标PDF的比重赋予每个样本一个权重。下面是一个简单的例子,使用NumPy来实现:
```python
import numpy as np
# 定义目标正态分布参数
mu = 0
sigma = 1 # 标准正太分布
target_pdf = lambda x: (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x - mu)**2) / (2 * sigma**2))
# 定义辅助正态分布,作为简单易抽样的源分布
auxiliary_pdf = lambda x: 1 # 这里假设是均匀分布,如果源分布是其他正态分布,只需改变这个函数
# 生成大量源分布的随机样本
n_samples = 100000
auxiliary_samples = np.random.normal(size=n_samples)
# 计算每个样本的重要性权重
weights = target_pdf(auxiliary_samples) / auxiliary_pdf(auxiliary_samples)
# 汇总重要性加权的估计
weighted_mean = np.sum(weights * auxiliary_samples) / np.sum(weights)
weighted_variance = np.sum(weights * (auxiliary_samples - weighted_mean)**2) / np.sum(weights)
print(f"Importance-sampled mean: {weighted_mean}")
print(f"Importance-sampled variance: {weighted_variance}")
阅读全文