声明:
本文章为作者学习所得,在讲述过程中均为口语化表达,不过多涉及严谨的数学定义,力求能让初学者也能理解。关于马尔科夫模型的严谨定义,大家可参考相关书籍。如有错误,欢迎指正。
马尔科夫性(关键):
这一点是谈马尔科夫链\隐马尔可夫模型的前提。
马尔科夫性定义:
假设某事件未来发生的状况只取决于现在。
举例理解:
假设连续三天的天气分别为:多云、阴、雨。
对应的时间我们记作:昨天、今天、明天
根据马尔科夫性,那么我们认为明天(第三天)的雨只受今天(第二天)的阴天气状况影响,而与昨天(第一天)的多云天气状况无关。
虽然事实上更可能是第一、二天的天气状况共同决定了第三天的天气状况。但为了能够应用马尔科夫模型,做出这样的假设。
个人认为这么做出假设的一个主要原因是受限于计算机的算力吧,如果充分考虑前面的多种因素,需要计算联合条件概率,会导致计算量非常大。这一点其实和自然语言处理中的n元语法模型类似。
图示理解:
马尔科夫性的这种性质也被称为“无记忆性”。
离散时间马尔科夫链:
这里为方便大家理解,用离散模型来讲解,连续的话思路应该类似,计算方法上采用积分的思路。
离散化模型使用基本的概率公式即可。
三个核心概念:
离散时间:时刻点的集合
状态空间:状态的集合
转移概率:从一个状态到另外一个状态的概率
图示理解:
例题分析:
当马尔科夫链复杂起来,各状态彼此关联起来时,转移概率往往会写成一个状态转移矩阵的形式。
比如面对一个类似这样阶层变化的问题:
下图为不同阶层的人后代向其他阶层变迁的概率,问若某人父辈处于贫穷状态,则他处于中产,其后代处于富裕状态的概率是多大?
状态转移矩阵为:
计算过程:
但根据马尔科夫性,可以对上述式子进行简化:
也就是说,在计算P(子辈=富裕|父辈=贫穷,自己=中产)这一项时,因为与“子辈”按时间顺序相连的是“自己”,认为与“父辈”(爷爷)无关,所以不用管后面一项,将该项与P(子辈=富裕|自己=中产)认为相等。
计算结果为:0.2*0.2 = 0.04
马尔科夫链的稳态:
继续上面的问题,如果将问题改为:问若某人父辈处于贫穷状态,则子辈处于富裕状态的概率是多大?
计算公式为:P(子辈=富裕|父辈=贫穷)=
P(自己=贫穷|父辈=贫穷)*P(子辈=富裕|自己=贫穷)+
P(自己=中产|父辈=贫穷)*P(子辈=富裕|自己=中产)+
P(自己=富裕|父辈=贫穷)*P(子辈=富裕|自己=富裕)
对应到转移矩阵中为:
这个式子其实就是转移矩阵第一行乘以第一列的结果:
因而,对于这样的规律进行总结,我们可以发现:
假设以自己为标准,已知自己所处的阶层:
自己的第一代子孙情况可以由转移矩阵直接得到;
自己的第二代子孙情况,可以由转移矩阵的平方得到;
自己的第三代子孙情况,可以由转移矩阵的三次方得到;
以此类推...
对于类似的问题,比如只要知道不同天气情况相互转换的概率,那么理论上,我们可以根据今天的天气,推测出以后得天气。
同时,我们可以发现,对于转移矩阵迭代次数n逐渐增大时,这个得到的结果将趋于一个固定的矩阵,此时,我们称马尔科夫链达到了稳态,或者说收敛。
转移矩阵能够收敛需要满足的条件之一是:每一行概率之和为1。
总结:
马尔科夫模型的一般表示形式为一个三元组:
其中,
S 就是前文提到的状态集合;
A 就是状态转移矩阵;
π 是初始向量;这里π对应到上面的问题中,比如知道今天的天气,知道自己所处的阶层,其实就是一个某个位置为1,其他位置均为0的一个向量(1,0,0);对于更一般的情况,初始向量可能是其他分布如(0.5,0.2,0.3)等等。