马尔科夫链(Markov chain, Markov model)讲解(一阶和高阶)及其应用(建模数据预测)

本文简单讲解其概念(包括一阶,二阶和高阶链)及应用(如何通过建模进行数据预测)

概括的来说,马尔科夫链是基于统计的数学模型。

那么,什么叫基于统计?列举一个生活中最常见的场景。当我们使用输入法打字的时候,输入法会自动弹出联想文字。这在写一些非常用名词的时候特别明显,比如名字。例如某人叫奥利维尔,我们第一次输入这个名字时,需要完整且正确的拼写每一个字,否则就成了奥力威尔之类的词。但多次输入后,就会直接弹出奥利维尔,甚至我们可能仅仅只需要输入奥,输入法就会自动联想出奥利维尔这个完整名词。输入法内部的处理其实就包含了马尔科夫链的处理逻辑:当用户经常输入某个词组时,该词组的使用频率变高,因此用户仅仅只输入了该词组的开头时,也有很大的可能性是想输入这个词组,该联想的提示优先级就更高。

举这个例子是想传达一个基本的思想,即马尔科夫链的模型的建立是基于历史数据的。那么,如何从历史数据中进行统计,并建立马尔科夫模型?这需要从马尔科夫链的定义开始讲起。

马尔科夫链是反映了对象状态变化的过程的数学模型。

我们仍然从一个例子出发。我们现在掌握了一些历史数据,记录了某地近一年内(2021年)每天的天气情况,天气的类型我们简单定义为阴天,晴天,雨天。历史数据可以展示如下
1.1晴,1.2 晴, 1.3 阴, 1.4 雨…12.30 雨,12.31 雨。
这里的天气类型,我们可以看作对象的状态。例如阴天为状态1,晴天为状态2,雨天为状态3。
那么历史数据可以改写为
1.12,1.2 2, 1.3 1, 1.4 3…12.30 3,12.31 3。
可以将其看作一个长度为365的长列表
[2,2,1,3…3,3]
目前我们已经有了2021年的历史数据,现在我们想要做的是,预测2022年某一天的未来的天气。

当然,这个例子本身实用性是很差的,因为使用马尔科夫预测天气效果并不好,这里仅仅是举个现实生活中的例子帮助理解马尔科夫链的建模过程。

现在我们利用马尔科夫链预测明天的天气。这里我们有多种选择,例如我们用今天的天气来预测明天的天气,或者我们用昨天和今天的天气来进行预测,甚至我们用近一周的天气来进行预测。直觉上,我们仅用今天的天气来预测的准确性,低于我们用更长时间的天气来预测的准确性。
这里已经包含了马尔科夫链的阶数的概念。已知今天预测明天,需要建立一阶马尔科夫链;已知两天(昨天,今天)预测明天,需要建立二阶马尔科夫链,以此类推到n阶马尔科夫链。

n阶马尔科夫链描述为,下一个阶段的状态,仅和前n个阶段的状态有关。

下一步为数据统计,我们以建立一阶马尔科夫链为例。对于一阶链,我们需要从当前状态预测下一状态。这引出了马尔科夫链的关键工具:概率状态转移矩阵。现在我们需要做如下概率统计:
当前状态为1,下一状态为1的概率(P11)
当前状态为1,下一状态为2的概率(P12)
当前状态为1,下一状态为3的概率(P13)
当前状态为2,下一状态为1的概率(P21)
当前状态为2,下一状态为2的概率(P22)
当前状态为2,下一状态为3的概率(P23)
当前状态为3,下一状态为1的概率(P31)
当前状态为3,下一状态为2的概率(P32)
当前状态为3,下一状态为3的概率(P33)
并把它们放入一个3*3的矩阵。
例如计算当前状态为1,下一状态为2的概率。我们需要在长列表中中找出为1,2的短列表个数,这样我们得到了频数,就能算出频率并近似看作概率。
于是我们得到了这样一个概率状态转移矩阵
P11 P12 P13
P21 P22 P23
P31 P32 P33
它的值可能为
0.1 0.3 0.6
0.2 0.5 0.3
0.4 0.4 0.2
需要注意的是,每行的和一定是1,因为只能向有限的状态转移。例如当前状态是2,那么下一个状态只能是1,2或者3。

从概率状态转移矩阵计算出累计状态转移矩阵

计算过程为其左边的数累加。从上面的概率状态转移矩阵计算出的累计状态转移矩阵为
0.1 0.4 1
0.2 0.7 1
0.4 0.8 1
概率状态转移矩阵正确的话,算出来的累计状态转移矩阵最右列一定为1。

状态预测

生成一个0-1的随机值,并作为阈值和第x行数据进行比较,x是当前状态的值。例如当前状态为2,就和第二行数据比较。如果阈值大于等于该行第y列且小于该行第y+1列,则下一状态的值预测为y+1(小于第一列则下一状态为1)。以此类推。

高阶链建模,公式及状态预测详细过程等请阅读Synthetic High-Resolution Wind Data Generation Based on Markov Model

  • 16
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值