求离散马尔科夫链的平稳分布+按照一定概率分布生成想要的样本
1. 求離散馬爾科夫鏈的平穩分布的兩種解法
假設離散馬爾科夫鏈的轉移矩陣為P PP,平穩分布為π \piπ,則平穩分布滿足:
Pπ=πP \pi = \piPπ=π
1.1 迭代法
求平穩分布的一種簡單方法是迭代法,即隨機初始化初始分布π 0 \pi_0π
0
?
,利用上式不斷迭代求解下一時刻的狀態分布直到狀態分布收斂,則求得平穩分布。
1.2 特征分解法
另一種解法是利用特征分解,由于平穩分布滿足P π = π P\pi=\piPπ=π,與特征方程A x = λ x Ax=λxAx=λx聯系可知平穩分布π ππ就是轉移矩陣P PP的特征值為1對應的特征向量(歸一化),因此可以直接對轉移矩陣進行特征分解來求平穩分布。
"""特征分解求平穩分布. """ values, vecs = eig(markov_marix,) for i in range(len(values)):if abs(values[i]-1) <= 1e-9:print(values[i])print(vecs[:, i]/sum(vecs[:, i]))模擬結果如下,兩種方法求得平穩分布一致
2. MCMC方法: 按照一定概率分布生成想要的樣本
按照一定的概率分布生成我們想要的樣本,實在實際應用中非常重要的方法, 相關的方法也有許多了, 對于給定的一維函數 f(x) , 有許多常用的采樣方法是的樣本符合 f(x) 的概率分布, 但是想要模擬一個其分量為相關隨機變量的隨機向量 X ,確實一件困難的事. 下面我們介紹一個強有力的方法來生成分布近似為 X 的分布的隨機向量. 這種方法被稱為 MCMC 方法.
2.1 馬氏鏈
考慮一組隨機變量: X0,X1,… . 這里把 Xn 解釋為"在時間點n的系統的狀態, 并假設 Xn 可能取值的集合,即系統所能達到的狀態的集合為 1,…,N . 如果存在一組數 Pij,i,j=1,...,NP_{ij},i,j=1,...,NPij?,i,j=1,...,N , 使得過程無論什么時候處于狀態 i , 不用管前面的狀態如何, 其下一個狀態是 j 的概率為 PijP_{ij}Pij? , 我們便稱 {Xn,n≥0} , 構成一個轉移矩陣為 Pij,i,j=1,...,NP_{ij},i,j=1,...,NPij?,i,j=1,...,N 的馬氏鏈. 顯然,從上一個時間點上的狀態 i 轉移到下一個時間點上的所有的狀態的概率之和應該是1:
現在的主要問題是: 我們想要生成一個符合我們要求的穩定概率的馬氏鏈, 那么我們通過運行這個馬氏鏈來獲得樣本,這個樣本就應該符合我們想要的概率.
2.2 Hastings-Metropolos算法
在介紹這個算法之前, 我們先來給出一個結論: 定理:[細致平穩條件] 如果非周期馬氏鏈的轉移矩陣 P 和分布 π(x) 滿足:
π(i)Pij=π(j)Pij,foralli,j(1)π(i)P_{ij}=π(j)P_{ij},\ for\ all\ i,j\ (1)π(i)Pij?=π(j)Pij?,?for?all?i,j?(1)
則 π(x)\pi(x)π(x) 是馬氏鏈的平穩分布,上式被稱為細致平穩條件(detailed balance condition)。
我們可以通過這個條件, 來構建任意我們想要的穩定概率的轉移矩陣.
原文鏈接:https://blog.csdn.net/weixin_43486780/article/details/104407875
http://logicgogh.github.io/articles/MCMC
總結
以上是生活随笔為你收集整理的求离散马尔科夫链的平稳分布+按照一定概率分布生成想要的样本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux串口助手(linux 串口助手
- 下一篇: MCMC 和 Gibbs采样