马尔科夫模型
本文部分内容摘自:
[1]. Computer vision - a modern approch, section21.4. 2002. David A. Forths et al.
[2]. 马尔科夫链
-----------------------------------------------------------------------------------------------
1. Markov chain
2. Hidden Markov Modelson Discrete State Spaces
state transition matrix中,第i行表示状态i转移到其它状态的概率,第j列表示其它状态转移到状态j的概率。
在上面的推导中,是列向量,推导得到的是,如果是行向量,则是。
3. Example of markov chain
假设初始状态是牛市的概率0.3,熊市的概率是0.4,横盘的概率是0.3,即,并假设一天股市状态转移一次,我们想知道后面每一天的股市情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import numpy as np import matplotlib.pyplot as plt n = 30 # 状态转移次数 states = np.zeros((n, 3 )) states[ 0 , :] = [ 0.1 , 0.7 , 0.2 ] # 初始状态 trans_mat = np.array([[ 0.9 , 0.075 , 0.025 ], [ 0.15 , 0.8 , 0.05 ], [ 0.25 , 0.25 , 0.5 ]]) # 状态转移矩阵 for i in range (n - 1 ): states[i + 1 , :] = np.dot(states[i, :], trans_mat) print ( 'after {} transitions' . format (n)) print (states[n - 1 , :]) plt.figure() plt.plot( range (n), states[:, 0 ], label = 'bull market' ) plt.plot( range (n), states[:, 1 ], label = 'bear market' ) plt.plot( range (n), states[:, 2 ], label = 'stagnant market' ) plt.xlabel( 'n' ) plt.ylabel( 'probability' ) plt.legend(loc = 'best' ) plt.show() |
运行结果:
从图中我们可以看到,经过约20次状态转移后,概率分布不再变化,牛市的概率为0.624,熊市的概率为0.312,横盘的概率为0.062。
即使初始状态设置为不同的值,最终的概率分布还是一样的,比如我们把初始值设为[0.6, 0.1, 0.3],运行程序的结果为:
因此,马尔科夫链有这么一个性质:状态转移一定次数之后,概率分布将达到稳定状态,即使初始概率分布不同,最终也能达到稳定分布。
但是,具备这个性质是需要一些前提条件的:
- 任何两个状态是连通的:这个指的是从任意一个状态可以通过有限步到达其他的任意一个状态,不会出现条件概率一直为0导致不可达的情况。
- 状态转移矩阵不会改变,即状态间的转移概率固定不变。
- 不能是简单的循环,例如全是从x到y再从y到x。
4. Applications of markov chain (to be continued)
自然语言处理和语音
一个字可以认为是一个状态,已知前面的字,预测后面可能出现的字,这就可以用到马尔科夫链了。
......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通