【机器学习之---数学】马尔科夫链

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

马尔科夫

v2-523405fafe4484f7be72e0a5569c42a9_720w

1. 概念

1.1 引言

马尔可夫链在许多领域都有应用,包括物理学、生物学、工程学、经济学和计算机科学等。在计算机科学中,特别是在算法设计、复杂性理论、网络科学和人工智能等领域,马尔可夫链是一个基本的概念。

马尔可夫链是随机过程 这门课程中的一部分。简单来说,随机过程就是使用统计模型一些事物的过程进行预测和处理 ,比如股价预测通过今天股票的涨跌,却预测明天后天股票的涨跌;天气预报通过今天是否下雨,预测明天后天是否下雨。这些过程都是可以通过数学公式进行量化计算的。通过下雨、股票涨跌的概率,用公式就可以推导出来 N 天后的状况。

它是一个离散时间随机过程,其中系统的下一个状态只依赖于当前状态,与过去的状态无关。这种“无后效性”(无记忆性)是马尔可夫链的核心特性(马尔科夫性)。

1.2 马尔可夫过程和马尔科夫链

其中,涉及两个概念,马尔科夫过程马尔科夫链。

马尔科夫过程:

  • 是一个随机过程,其特点是系统未来的状态仅依赖于当前状态,与过去的状态无关。
  • 它可以在任何时间点定义,并可以在连续或离散的时间框架下进行。
  • 马尔科夫过程可以是连续状态的,也可以是离散状态的。

马尔科夫链:

  • 是一种特殊的马尔科夫过程,它通常描述的是离散时间序列上的状态转移。
  • 它由一系列离散状态组成,每个状态之间的转移遵循马尔科夫性质,即仅依赖于当前状态。
  • 马尔科夫链通常用转移概率矩阵来描述,这些概率表示在当前时间步从一个状态转移到另一个状态的概率。

简而言之,所有马尔科夫链都是马尔科夫过程,但不是所有马尔科夫过程都是马尔科夫链。 马尔科夫链是马尔科夫过程在离散时间框架下的一个具体实现。在实际应用中,特别是在计算机科学和工程学中,马尔科夫链的概念更为常见,因为它易于建模和分析。而马尔科夫过程的概念更加广泛,包括连续时间马尔科夫过程和更复杂的结构。

image-7

1.3 数学定义

有序列状态: . . . X t − 2 , X t − 1 , X t , X t − 1 , . . . ...X_{t-2},X_{t-1},X_t,X_{t-1},... ...Xt2,Xt1,Xt,Xt1,...,那么 X t − 1 X_{t-1} Xt1时刻的状态,只与 X t − 1 X_{t-1} Xt1时刻的状态有关,与 X t − 2 X_{t-2} Xt2时刻的状态无关。

P ( X t + 1 ∣ . . . X t − 2 , X t − 1 , X t , . . . ) = P ( X t + 1 ∣ X t ) P(X_{t+1}|...X_{t-2},X_{t-1},X_t,...) = P(X_{t+1}|X_t) P(Xt+1∣...Xt2,Xt1,Xt,...)=P(Xt+1Xt)

既然某一时刻状态转移的概率只依赖于它的前一个状态 ,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了。

通过马尔科夫链的模型转换,我们可以将事件的状态转换成概率矩阵 (又称状态分布矩阵 ),如下例:

image-8

其转移概率矩阵为:

image-9

有了状态转移矩阵以后,我们就可以很方便的计算n步以后在A和B的概率了。

1.4 性质

1.4.1 稳态分布

状态转移矩阵有一个非常重要的特性,经过一定有限次数序列的转换,最终一定可以得到一个稳定的概率分布 ,且与初始状态概率分布无关。

image-7

若,计算n天以后再g点的概率,则有:

$$
P_g{X_n = g} = (P^n)_{gg} \

P_b{ X_n=g } = (P^n)_{bg} \
$$

下表是n天以后在g点的概率:

image-10

我们发现马尔科夫链会“忘记”初始状态(无记忆性), 最终会收敛到稳定概率分布。

2. 应用

自然语音处理研究让机器“听懂”人类的语言,马尔科夫模型就解决了:

语言模型:N-Gram 是一种简单有效的语言模型,基于独立输入假设:第 n 个词的出现只与前面 N-1 个词相关,而与其它任何词都不相关 。整句出现的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到。

v2-47283cff65ce7f3a49b2c6c17d94d134_720w

参考

  1. https://zhuanlan.zhihu.com/p/448575579
  2. https://zhuanlan.zhihu.com/p/489239366
  3. https://blog.csdn.net/qq_27825451/article/details/100117715#t0
  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
生成灰色-马尔科夫链的代码如下所示: ```python import numpy as np def GM11(x0): """ 灰色预测模型GM(1,1)的Python实现 """ x1 = np.cumsum(x0) z1 = (x1[:-1] + x1[1:]) / 2.0 z1 = z1.reshape((len(z1), 1)) B = np.append(-z1, np.ones_like(z1), axis=1) Yn = x0[1:].reshape((len(x0) - 1, 1)) [[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) return (x0[0] - b / a) * np.exp(-a * np.arange(1, len(x0) + 1)) - (x0[0] - b / a) * np.exp(-a * np.arange(len(x0))) def Markov(data): """ 根据灰色预测结果生成马尔科夫链 """ delta = np.max(data) - np.min(data) p = np.zeros((delta+1, delta+1)) for i in range(len(data)-1): p[int(data[i+1])-int(data[i])][int(data[i])+1] += 1 for i in range(delta+1): if np.sum(p[i,:]) != 0: p[i,:] /= np.sum(p[i,:]) return p ``` 其中,`GM11` 函数实现了灰色预测模型GM(1,1)的计算,`Markov` 函数则根据灰色预测结果生成马尔科夫链。具体使用方法可以参考下面的示例代码: ```python import matplotlib.pyplot as plt # 生成测试数据 x0 = np.array([23, 26, 30, 34, 37, 40, 43, 46, 49, 53]) # 使用灰色预测模型计算预测值 x1 = GM11(x0) # 根据预测值生成马尔科夫链 p = Markov(x1) # 打印预测值和马尔科夫链 print('预测值:', x1) print('马尔科夫链:', p) # 绘制预测值和原始数据的对比图 plt.plot(x0, 'b-o', label='原始数据') plt.plot(x1, 'r-o', label='预测数据') plt.legend() plt.show() ``` 执行上述代码可以得到预测值和马尔科夫链的结果,并且绘制了预测值和原始数据的对比图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡侃有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值