马尔科夫链:

内容来自:
            七月机器学习
 
马尔科夫链:
 
马科夫链简述:
    在给定的当前知识或者信息下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的
                过去   ---------   现在 ---------------未来
                                            |---------有关系----|
                   |-----------------------无关系-------|
 
    未来的过程只与当前的过程有关,而与以前的关系没有关系
 
马科夫链的数学表示:
    每个状态的转移只依赖于之前的n个撞他,这个过程被称为1个n阶的模型,其中n是影响转移状态的数目。最简单的马尔科夫过程是一阶过程,每一个状态的转移只依赖于其之前的哪一个状态。
    数学表达式如下:
        
马尔科夫链举例分析    
举例:
        假设天气服从马尔科夫链:
                
            已知天气有阴和晴。假设今天是晴天,明天还是晴天概率是0.9;假设今天是晴天,明天还是阴天概率是0.1;假设今天是阴天,明天还是阴天概率是0.5;假设今天是阴天,明天还是晴天概率是0.5;
        状态转移矩阵:
                            
                          
                        横坐标为晴,阴
                        纵坐标为晴,阴
 
假设今天是晴天即:  P(S)  = [1,  0]     1代表晴,0代表0阴,因为  横坐标为晴,阴
则明天的晴天和阴天的概率如下:
                          [ 1  0 ] *   =  [ 0.9  0.1 ]
                        即:晴天的概率是0.9  阴天的概率是0.1             
从今天(晴或者阴)开始,在遥远的未来某天的,晴天或者阴天的概率分布是什么?
                
                    P是转移矩阵   
                    随着n增大,最终的值是0.833 和 0.167,对于今天的晴天和阴天的分布,即使两者对换即将初始的[1,  0 ]  换成[ 0 ,  1]也是这个值。即:
                    
                    这个也就是马尔科夫链的稳态分布。换句话说,分布是收敛的。
                
至此,得到一阶马尔科夫链过程定义了以下三个部分:
    1、 状态:晴天,阴天
    2、初始向量:定义系统在时间为0的时候的状态的概率
    3、状态转移矩阵:每种天气的转换的概率。所有能被这样的描述的系统都是一个马尔科夫过程
转移矩阵的由来:
 
 
马尔科夫链的缺陷:
        前后关系的缺失,带来来信息的缺失:
        比如股市,如果只是观察市场,只能知道当天的价格,成交量等信息,但是并不知道当前股市处于什么样的状态(牛市,熊市,震荡,反弹等等),在这种情况下完美有两个状态集合,一个可以观察到状态集合(股市价格成交量状态等)和一个隐藏的状态集合(股市状况)。
        我们希望能找一个算法可以根据股市价格成交量状况和马尔科夫链假设来预测股市的状况。在上面的这些情况下,可以观察到的状态序列和隐藏的状态序列是概率先关。
        于是可以将这种类型的过程建模称为一个隐藏的马尔科夫过程和一个与这个隐藏马尔科夫过程概率相关的并且可以观察到的状态集合,就是隐马尔科夫模型。
 
        以上描述似乎没有 马尔科夫链 + 隐藏层 (神经网络里的名词) = 隐马尔科夫链 的描述来的更直接
 
 
隐马尔科夫链:
 
隐马尔科夫链简述:
        假设有如上所示的三个色子,每次 从中拿一个色子,并投出数字,且玩家只能观测到数字。用隐马尔科夫链描述这个过程即是,针对投出的色子(观察值),隐马尔科夫链使用了一个隐藏层,即三个色子来描述事情的可能。
        
        如上所示:根据时间状态的变幻只与隐藏层有关。而人类观察到数字层,只与此刻观察到的隐层状态有关(即观察到的数字只与此刻的色子有关)。
        隐藏层状态变换如下(线上概率没有填写):
 
隐马尔科夫链解决的三大问题:
直接理解:
1、知道色子有几种(隐含状态数量),每种色子是什么(转换概率是什么)
        根据投色子投出的结果(可见状态),想知道每次投出来的都是那种色子(隐含状态链)
2、还是知道色子有几种(隐含状态数量),每种色子是什么(转换概率是什么)
        根据投色子投出的结果(可见状态),想知道每次投这个的结果的概率
3、知道色子有几种(隐含状态数量),不知道每种色子是什么
        观测到很多次投色子的结果(可见状态连),反推出每种色子是什么(转换概率是什么)
数学模型描述
马尔科夫链的验证问题:
        观察到的数据:  0 = O1 O2 O3 ... On  
        和得到的模型 : model = (A, B ,π) 
        猜测数据序列 P(0 | model )出现的概率
        直接应用:是否作弊
马尔科夫链的识别问题:
         根据观察到的数据:  0 = O1 O2 O3 ... On   (观察到的数据)
         和得到的模型 : model = (A, B ,π) 
         猜测状态序列 Q  = q1q2....qn   (隐藏层)
         如机器翻译
训练问题:
           给出观察到的数据: 0 = O1 O2 O3 ... On 
            如何调整模型          model = (A, B ,π) 
            使得  P(0 | model )  最大化
            EM问题:知道观察数据,如何让模型中的参数最大化。
 
隐马尔科夫链例子:
    如下:
            初始概率π:天气rainy 0.6  sunny  0.4
            隐藏层状态A: rainy  sunny
            观察数据B:walk  shop  clean    
    
三大问题:
    问题一:已知整个模型,观测到三天做的事情:散步,购物,收拾。那么,根据模型,计算产生这些行为的概率是多少
    问题二:同样知晓这个模型,同样是这三件事,猜想,这三天的天气是什么样?
    问题三:只知道三天做来三件事,其它信息什么度没有。得建立一个模型,晴天雨天转换概率,第一天天气情况的概率分布,根据天气情况选择做某些事的概率分布。
解法:
    问题一:Forward  Algorithrm,向前(前向)算法,或者Backward  Algo,向后算法。
    问题二:Viterbi  Algo,维特比算法。
    问题三:Baum-Welch Algo,鲍姆-韦尔奇算法。  近似EM算法
 
 
问题一的解决1:遍历算法
        P(下雨,下雨,下雨,散步, 购物, 收拾 ) =  P(第一天下雨) * P(散步 | 第一天下雨) *P(第二天下雨) * P(购物| 第二天下雨) *P(第三天下雨) * P(收拾| 第三天下雨)
        在这里 第一天,第二天,第三天下雨,晴天的可能性很多
        P(下雨,下雨,晴天,散步, 购物, 收拾 )
        P(下雨,晴天,下雨,散步, 购物, 收拾 )
        P(下雨,晴天,晴天,散步, 购物, 收拾 )
        ....
        该问题即求:P(O | model ) 的概率。其中观察序列O = O1 O2 O3  ...... On。model是算法模型
        穷举所有可能发生的状态,并计算该状态下的样本序列发生的概率,算法公式如下:
                
        计算所有状态下,出现观察序列的值的和:
                
        
        最终得到目标序列发生的概率。
        算法缺陷:
                计算复杂度较高,该是N的T次方,N表示序列的长度,即O1O2。。。.On,T是状态数
                还要计算2T的
 
问题一的解决1:前向算法
        
 
        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        
    
 
        
 
                    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-12-21 22:40  dos_hello_world  阅读(433)  评论(0)    收藏  举报