python之马尔科夫链(Markov Chain)

马尔可夫链(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 的状态。

马尔可夫链的一个重要特性是它在长时间内具有收敛性,即在足够长的时间后,马尔可夫链的状态分布会收敛到一个稳态分布。这个性质是许多马尔可夫链算法应用的基础。

马尔可夫链的稳态分布表示在长时间运行后,随机过程中各个状态的概率分布不再随时间变化,保持恒定的概率分布。

这个是实例:

python 复制代码
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_state

    return 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 的概率,那么向量 ππ 就是该马尔可夫链的稳态分布。

对于连续状态空间的马尔可夫链,稳态分布通常以概率密度函数的形式表示。

稳态分布的存在性和唯一性取决于具体的马尔可夫链。对于满足一定条件的可逆马尔可夫链,稳态分布是唯一存在的。在实际应用中,稳态分布对于理解系统的长期行为、进行概率推断和模拟具有重要意义。

相关推荐
java1234_小锋15 分钟前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 神经网络基础原理
python·深度学习·tensorflow·tensorflow2
JJJJ_iii16 分钟前
【深度学习03】神经网络基本骨架、卷积、池化、非线性激活、线性层、搭建网络
网络·人工智能·pytorch·笔记·python·深度学习·神经网络
JJJJ_iii25 分钟前
【深度学习05】PyTorch:完整的模型训练套路
人工智能·pytorch·python·深度学习
lly20240644 分钟前
AJAX JSON 实例
开发语言
QiZhang | UESTC1 小时前
JAVA算法练习题day27
java·开发语言·c++·算法·leetcode·hot100
坚持就完事了1 小时前
2-C语言中的数据类型
c语言·开发语言
ss2731 小时前
手写MyBatis第96弹:异常断点精准捕获MyBatis深层BUG
java·开发语言·bug·mybatis
程序员小远1 小时前
常用的测试用例
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
IT学长编程1 小时前
计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·毕业设计·课程设计·毕业论文·海洋气象数据可视化平台
辣椒http_出海辣椒2 小时前
Python 数据抓取实战:从基础到反爬策略的完整指南
python