如何实现带成分参数约束的贝叶斯MCMC
3分量高斯混合模型权重参数约束下的MH采样方案
针对3分量高斯混合模型中前两个权重参数π₁、π₂需满足π₁≥0,π₂≥0,π₁+π₂≤1(π₃=1-π₁-π₂自动满足非负)的约束,以下是几种实用的MH采样方案,按易用性和效率排序:
方法一:参数变换映射到无约束空间(推荐)
这是最省心的方案,通过变量变换把约束的二维三角形区域映射到无约束的实数域,直接用对称提议分布做随机游走MH,无需处理截断。
具体步骤:
- 变量变换:采用stick-breaking变换+logit变换,将(π₁, π₂)转换为无约束的实数(x, y):
- 引入中间变量u₁∈[0,1]、u₂∈[0,1],令π₁=u₁,π₂=(1-u₁)u₂(此时π₃=(1-u₁)(1-u₂),自动满足权重和为1)
- 对u₁、u₂做logit变换得到无约束变量:
x = log(u₁/(1-u₁)),y = log(u₂/(1-u₂))
反向转换时用sigmoid函数:u₁ = 1/(1+exp(-x)),u₂ = 1/(1+exp(-y)),再推导π₁、π₂。
- MH采样流程:
- 在(x, y)空间初始化起点(x⁰, y⁰),转换为(π₁⁰, π₂⁰)
- 每一步从对称提议分布(比如二维正态分布
N((xᵗ, yᵗ), Σ))采样候选点(x', y') - 计算Hastings接受率:
α = min(1, p(x', y')/p(xᵗ, yᵗ)),其中p(x,y)是变换后的目标分布,等于原目标分布p(π₁,π₂)乘以变量变换的雅可比行列式绝对值:p(x,y) = p(σ(x), (1-σ(x))σ(y)) * σ(x)*(1-σ(x))² * σ(y)*(1-σ(y))
(σ是sigmoid函数,雅可比项由变换的导数推导而来) - 生成0-1之间的均匀随机数u,若u≤α则接受候选点,否则保留当前点
- 优势:无需处理截断,提议分布对称,Hastings比率计算更简洁;避免约束区域边界处的采样偏差。
方法二:直接使用截断提议分布的随机游走MH
如果不想做变量变换,可以直接在约束区域内用截断的多元正态分布作为提议分布,对应你提到的思路。
具体步骤:
- 提议分布设计:当前点为(π₁ᵗ, π₂ᵗ),候选点从截断在可行域(π₁≥0, π₂≥0, π₁+π₂≤1)的多元正态分布采样,即
N((π₁ᵗ, π₂ᵗ), Σ)的截断版本。 - Hastings比率修正:由于截断破坏了正态分布的对称性,Hastings比率需要包含提议分布的比值:
α = min(1, [p(π₁', π₂')/p(π₁ᵗ, π₂ᵗ)] * [q(π₁ᵗ|π₁', π₂')/q(π₁'|π₁ᵗ, π₂ᵗ)])
其中q(θ'|θ)是截断正态在θ处的条件密度,可拆解为:q(θ'|θ) = N(θ'; θ, Σ) / P(N(θ; θ, Σ) ∈ 可行域)
因此提议分布的比值等于两个可行域概率的反比:P(N(θ'; θ', Σ) ∈ 可行域) / P(N(θ; θ, Σ) ∈ 可行域) - 注意事项:可行域概率可以用多元正态CDF数值计算(比如Python的
scipy.stats.multivariate_normal.cdf、R的mvtnorm::pmvnorm),如果协方差矩阵Σ很小,截断概率接近1,比值近似为1,可简化计算。 - 优势:直观直接,无需变量变换;劣势:边界处截断概率计算可能耗时,对称丧失导致Hastings比率更复杂。
方法三:分块Gibbs+MH采样
如果π₁和π₂的条件后验有较好的形式,可以分块交替采样,每一步针对单个参数做带约束的MH或直接采样。
具体步骤:
- 固定π₂,采样π₁:π₁的可行域是[0, 1-π₂],若π₁的条件后验是共轭分布(比如Beta分布,当权重用Beta先验时),直接采样;否则用截断正态或均匀分布作为提议分布做MH采样。
- 固定π₁,采样π₂:同理,π₂的可行域是[0, 1-π₁],重复上述采样逻辑。
- 优势:分块采样可降低参数间相关性对收敛的影响;劣势:若条件后验非共轭,仍需处理截断提议分布,流程相对繁琐。
内容的提问来源于stack exchange,提问作者LifeisGood94
相关产品推荐
相关产品推荐

