馬爾可夫鏈(Markov Chain)是一種隨機過程,具有“馬爾可夫性質”,即在給定當前狀態的條件下,未來狀態的概率分布僅依賴于當前狀態,而與過去狀態無關。馬爾可夫鏈在很多領域都有廣泛的應用,包括蒙特卡洛方法、統計物理學、自然語言處理等。
馬爾可夫鏈的一般定義如下:
給定狀態空間 SS 和狀態轉移概率矩陣 PP,其中 PijPij? 表示從狀態 ii 轉移到狀態 jj 的概率,如果對于任意狀態 i,ji,j 和任意時間步 nn,滿足以下條件,則稱該過程是馬爾可夫鏈:
P(Xn+1=j∣X0,X1,…,Xn)=P(Xn+1=j∣Xn)
P(Xn+1?=j∣X0?,X1?,…,Xn?)=P(Xn+1?=j∣Xn?)
其中,XnXn? 表示在時間步 nn 的狀態。
馬爾可夫鏈的一個重要特性是它在長時間內具有收斂性,即在足夠長的時間后,馬爾可夫鏈的狀態分布會收斂到一個穩態分布。這個性質是許多馬爾可夫鏈算法應用的基礎。
馬爾可夫鏈的穩態分布表示在長時間運行后,隨機過程中各個狀態的概率分布不再隨時間變化,保持恒定的概率分布。
這個是實例:
import numpy as np# 定義更多的狀態
states = ["Sunny", "Cloudy", "Rainy", "Snowy"]# 定義狀態轉移概率矩陣
transition_matrix = np.array([[0.7, 0.2, 0.1, 0.0],[0.3, 0.4, 0.2, 0.1],[0.1, 0.3, 0.4, 0.2],[0.0, 0.1, 0.3, 0.6]])# 定義初始狀態分布
initial_distribution = np.array([0.4, 0.3, 0.2, 0.1])# 生成馬爾可夫鏈軌跡
def generate_markov_chain(num_steps):current_state = np.random.choice(states, p=initial_distribution)chain = [current_state]for _ in range(num_steps - 1):next_state = np.random.choice(states, p=transition_matrix[states.index(current_state)])chain.append(next_state)current_state = next_statereturn chain# 生成馬爾可夫鏈軌跡并打印結果
num_steps = 10
markov_chain = generate_markov_chain(num_steps)
print("Generated Markov Chain:", markov_chain)
穩態分布(Stationary Distribution)是指在馬爾可夫鏈達到平穩狀態后,隨機過程中各個狀態的概率分布不再隨時間變化,保持恒定的概率分布。換句話說,穩態分布是一個時間不變的分布,表示在長時間運行后,隨機過程在不同狀態的停留概率。
形式化地說,對于一個離散狀態空間的馬爾可夫鏈,如果存在一個向量 ππ,滿足以下兩個條件:
非負性條件: 所有的 πiπi?(ii 表示狀態)都是非負的。
概率歸一條件: 向量 ππ 的元素之和等于1,即 ∑iπi=1∑i?πi?=1。
并且對于任意時間步 nn,都有 P(Xn+1=j)=∑iP(Xn=i)?P(Xn+1=j∣Xn=i)P(Xn+1?=j)=∑i?P(Xn?=i)?P(Xn+1?=j∣Xn?=i),其中 P(Xn=i)P(Xn?=i) 表示在時間步 nn 處于狀態 ii 的概率,那么向量 ππ 就是該馬爾可夫鏈的穩態分布。
對于連續狀態空間的馬爾可夫鏈,穩態分布通常以概率密度函數的形式表示。
穩態分布的存在性和唯一性取決于具體的馬爾可夫鏈。對于滿足一定條件的可逆馬爾可夫鏈,穩態分布是唯一存在的。在實際應用中,穩態分布對于理解系統的長期行為、進行概率推斷和模擬具有重要意義。