首页 > 其他分享 >马尔可夫链

马尔可夫链

时间:2024-03-25 19:29:48浏览次数:29  
标签:Xj Pij Xi 0.1 马尔可夫 ij 晴天

马尔可夫链的简单讲述

文章目录


一、概念

1.1 马尔可夫性质(Markov property

当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态

以后什么样,只取决于现在什么样,跟以前什么样没关系

1.2 马尔可夫模型

是一种具有马尔可夫性质的统计模型,广泛应用在语音识别、词性自动标注、音字转换、概率文法等各个自然语言处理等应用领域。

1.3 马尔科夫链(Markov Chain

具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)

马尔可夫链是最简单的马尔可夫模型

二、头疼部分(可以略过

2.1 条件概率和全概率公式

条件概率:就是 B B B发生的情况下 A A A发生的概率
数学表达: P ( A ∣ B ) = P ( A B ) / P ( B ) P(A|B) = P(AB)/P(B) P(A∣B)=P(AB)/P(B)

全概率公式: A A A发生的概率等于所有 B i B_i Bi​发生下A发生的概率和(要求 B i B_i Bi​两两互斥
数学表达: P ( A ) = P ( A ∣ B 1 ) P ( B 1 ) + P ( A ∣ B 2 ) P ( B 2 ) + . . . + P ( A ∣ B n ) P ( B n ) P(A) = P(A|B_1)P(B_1) + P(A|B_2)P(B_2) + ... + P(A|B_n)P(B_n) P(A)=P(A∣B1​)P(B1​)+P(A∣B2​)P(B2​)+...+P(A∣Bn​)P(Bn​)

2.2 状态转移矩阵

马尔可夫图例

状态 1 状态 2 状态 3 状态 1 P i j ( X j = 1 ∣ X i = 1 ) P i j ( X j = 1 ∣ X i = 2 ) P i j ( X j = 1 ∣ X i = 3 ) 状态 2 P i j ( X j = 2 ∣ X i = 1 ) P i j ( X j = 2 ∣ X i = 2 ) P i j ( X j = 2 ∣ X i = 3 ) 状态 3 P i j ( X j = 3 ∣ X i = 1 ) P i j ( X j = 3 ∣ X i = 2 ) P i j ( X j = 3 ∣ X i = 3 ) \begin{matrix} & 状态1 & 状态2 &状态3 \\ 状态1 & P_{ij}(X_j=1|X_i=1) &P_{ij}(X_j=1|X_i=2) & P_{ij}(X_j=1|X_i=3)\\ 状态2 & P_{ij}(X_j=2|X_i=1) & P_{ij}(X_j=2|X_i=2) & P_{ij}(X_j=2|X_i=3)\\ 状态3 & P_{ij}(X_j=3|X_i=1) & P_{ij}(X_j=3|X_i=2) & P_{ij}(X_j=3|X_i=3)\end {matrix} 状态1状态2状态3​状态1Pij​(Xj​=1∣Xi​=1)Pij​(Xj​=2∣Xi​=1)Pij​(Xj​=3∣Xi​=1)​状态2Pij​(Xj​=1∣Xi​=2)Pij​(Xj​=2∣Xi​=2)Pij​(Xj​=3∣Xi​=2)​状态3Pij​(Xj​=1∣Xi​=3)Pij​(Xj​=2∣Xi​=3)Pij​(Xj​=3∣Xi​=3)​

P i j 代表从第 i 次到 j = i + 1 次时的转移概率。 P_{ij}代表从第i次到j=i+1次时的转移概率。 Pij​代表从第i次到j=i+1次时的转移概率。

记第 i 次的状态概率为 X i = ( P i ( X i = 1 ) , P i ( X i = 2 ) , P i ( X i = 3 ) ) T 记第i次的状态概率为X^i=(P_i(X_i=1),P_i(X_i=2),P_i(X_i=3))^T 记第i次的状态概率为Xi=(Pi​(Xi​=1),Pi​(Xi​=2),Pi​(Xi​=3))T

记状态转移矩阵 A 33 A_{33} A33​:

A 33 = P i j ( X j = 1 ∣ X i = 1 ) P i j ( X j = 1 ∣ X i = 2 ) P i j ( X j = 1 ∣ X i = 3 ) P i j ( X j = 2 ∣ X i = 1 ) P i j ( X j = 2 ∣ X i = 2 ) P i j ( X j = 2 ∣ X i = 3 ) P i j ( X j = 3 ∣ X i = 1 ) P i j ( X j = 3 ∣ X i = 2 ) P i j ( X j = 3 ∣ X i = 3 ) A_{33}=\begin{matrix} P_{ij}(X_j=1|X_i=1) &P_{ij}(X_j=1|X_i=2) & P_{ij}(X_j=1|X_i=3)\\P_{ij}(X_j=2|X_i=1) & P_{ij}(X_j=2|X_i=2) & P_{ij}(X_j=2|X_i=3)\\ P_{ij}(X_j=3|X_i=1) & P_{ij}(X_j=3|X_i=2) & P_{ij}(X_j=3|X_i=3)\end {matrix} A33​=Pij​(Xj​=1∣Xi​=1)Pij​(Xj​=2∣Xi​=1)Pij​(Xj​=3∣Xi​=1)​Pij​(Xj​=1∣Xi​=2)Pij​(Xj​=2∣Xi​=2)Pij​(Xj​=3∣Xi​=2)​Pij​(Xj​=1∣Xi​=3)Pij​(Xj​=2∣Xi​=3)Pij​(Xj​=3∣Xi​=3)​

根据全概率公式有: P j ( X j = 1 ) = P i j ( X j = 1 ∣ X i = 1 ) P ( X i = 1 ) + P i j ( X j = 1 ∣ X i = 2 ) P ( X i = 2 ) + P i j ( X j = 1 ∣ X i = 3 ) P ( X i = 3 ) 根据全概率公式有:\\P_j(X_j=1)=P_{ij}(X_j=1|X_i=1)P(X_i=1)+P_{ij}(X_j=1|X_i=2)P(X_i=2)+P_{ij}(X_j=1|X_i=3)P(X_i=3) 根据全概率公式有:Pj​(Xj​=1)=Pij​(Xj​=1∣Xi​=1)P(Xi​=1)+Pij​(Xj​=1∣Xi​=2)P(Xi​=2)+Pij​(Xj​=1∣Xi​=3)P(Xi​=3)

则第 j 次 X j = X i + 1 = A X i , 根据学过的知识,我们知道如果给定初始状态 X 的概率,那么经过 λ 次转移后的 X λ = A λ X 则第j次X^j=X^{i+1}=AX^i,根据学过的知识,我们知道如果给定初始状态X的概率,那么经过\lambda次转移后的X^{\lambda}=A^{\lambda}X 则第j次Xj=Xi+1=AXi,根据学过的知识,我们知道如果给定初始状态X的概率,那么经过λ次转移后的Xλ=AλX

三、 例子部分(以天气预报为例子

3.1 例子描述

假设每一天有且只有三种天气:晴天、阴天和雨天

已知:今天是晴天 那么:

  • 1.明天是晴天的概率是0.6
  • 2.明天是阴天的概率是0.3
  • 3.明天是雨天的概率是0.1

已知:今天是阴天 那么:

  • 1.明天是晴天的概率是0.1
  • 2.明天是阴天的概率是0.4
  • 3.明天是雨天的概率是0.5

已知:今天是雨天 那么:

  • 1.明天是晴天的概率是0.7
  • 2.明天是阴天的概率是0.2
  • 3.明天是雨天的概率是0.1

请预测未来n天的天气

3.2 例子转化数学语言

天气预报例子

晴天 阴天 雨天 晴天 P i j ( X j = 晴天 ∣ X i = 晴天 ) = 0.6 P i j ( X j = 晴天 ∣ X i = 阴天 ) = 0.1 P i j ( X j = 晴天 ∣ X i = 雨天 ) = 0.7 阴天 P i j ( X j = 阴天 ∣ X i = 晴天 ) = 0.3 P i j ( X j = 阴天 ∣ X i = 阴天 ) = 0.4 P i j ( X j = 阴天 ∣ X i = 雨天 ) = 0.2 雨天 P i j ( X j = 雨天 ∣ X i = 晴天 ) = 0.1 P i j ( X j = 雨天 ∣ X i = 阴天 ) = 0.5 P i j ( X j = 雨天 ∣ X i = 雨天 ) = 0.1 \begin{matrix} & 晴天 & 阴天 &雨天\\ 晴天 & P_{ij}(X_j=晴天 |X_i=晴天 )=0.6 &P_{ij}(X_j=晴天 |X_i=阴天 )=0.1 & P_{ij}(X_j=晴天 |X_i=雨天)=0.7\\ 阴天 & P_{ij}(X_j=阴天 |X_i=晴天 )=0.3 & P_{ij}(X_j=阴天 |X_i=阴天 )=0.4 & P_{ij}(X_j=阴天 |X_i=雨天)=0.2\\ 雨天& P_{ij}(X_j=雨天|X_i=晴天 )=0.1 & P_{ij}(X_j=雨天|X_i=阴天 )=0.5 & P_{ij}(X_j=雨天|X_i=雨天)=0.1\end {matrix} 晴天阴天雨天​晴天Pij​(Xj​=晴天∣Xi​=晴天)=0.6Pij​(Xj​=阴天∣Xi​=晴天)=0.3Pij​(Xj​=雨天∣Xi​=晴天)=0.1​阴天Pij​(Xj​=晴天∣Xi​=阴天)=0.1Pij​(Xj​=阴天∣Xi​=阴天)=0.4Pij​(Xj​=雨天∣Xi​=阴天)=0.5​雨天Pij​(Xj​=晴天∣Xi​=雨天)=0.7Pij​(Xj​=阴天∣Xi​=雨天)=0.2Pij​(Xj​=雨天∣Xi​=雨天)=0.1​

3.3 状态转移矩阵

A 33 = 0.6 0.1 0.7 0.3 0.4 0.2 0.1 0.5 0.1 A_{33}=\begin{matrix} 0.6&0.1 & 0.7\\0.3 & 0.4 & 0.2\\0.1 & 0.5 & 0.1\end {matrix} A33​=0.60.30.1​0.10.40.5​0.70.20.1​

可以知道今天,也就是 X = ( 1 , 0 , 0 ) T ,即晴天。或者 X = ( 0 , 1 , 0 ) T ,即阴天。或者 X = ( 0 , 0 , 1 ) T ,即雨天。 可以知道今天,也就是\\X=(1,0,0)^T,即晴天。或者\\X=(0,1,0)^T,即阴天。或者\\X=(0,0,1)^T,即雨天。 可以知道今天,也就是X=(1,0,0)T,即晴天。或者X=(0,1,0)T,即阴天。或者X=(0,0,1)T,即雨天。

以今天是晴天 X = ( 1 , 0 , 0 ) T 为例,预测明天的天气情况(以明天晴天的概率为例): 根据全概率公式可以知道明天是晴天的概率为: P j ( X j = 晴 ) = P i j ( X j = 晴 ∣ X i = 晴 ) P i ( X i = 晴 ) + P i j ( X j = 晴 ∣ X i = 阴 ) P i ( X i = 阴 ) + P i j ( X j = 晴 ∣ X i = 雨 ) P i ( X i = 雨 ) 以今天是晴天X=(1,0,0)^T为例,预测明天的天气情况(以明天晴天的概率为例): \\根据全概率公式可以知道明天是晴天的概率为: \\P_j(X_j=晴)=P_{ij}(X_j=晴|X_i=晴)P_i(X_i=晴)+P_{ij}(X_j=晴|X_i=阴)P_i(X_i=阴)+P_{ij}(X_j=晴|X_i=雨)P_i(X_i=雨) 以今天是晴天X=(1,0,0)T为例,预测明天的天气情况(以明天晴天的概率为例):根据全概率公式可以知道明天是晴天的概率为:Pj​(Xj​=晴)=Pij​(Xj​=晴∣Xi​=晴)Pi​(Xi​=晴)+Pij​(Xj​=晴∣Xi​=阴)Pi​(Xi​=阴)+Pij​(Xj​=晴∣Xi​=雨)Pi​(Xi​=雨)

计算明天是晴天、阴天、雨天的具体概率
P j ( X j = 晴 ) = 0.6 × 1 + 0.1 × 0 + 0.7 × 0 = 0.6 P_j(X_j=晴)=0.6×1+0.1×0+0.7×0=0.6 Pj​(Xj​=晴)=0.6×1+0.1×0+0.7×0=0.6
P j ( X j = 阴 ) = 0.3 × 1 + 0.4 × 0 + 0.2 × 0 = 0.3 P_j(X_j=阴)=0.3×1+0.4×0+0.2×0=0.3 Pj​(Xj​=阴)=0.3×1+0.4×0+0.2×0=0.3
P j ( X j = 雨 ) = 0.1 × 1 + 0.5 × 0 + 0.1 × 0 = 0.1 P_j(X_j=雨)=0.1×1+0.5×0+0.1×0=0.1 Pj​(Xj​=雨)=0.1×1+0.5×0+0.1×0=0.1
得到明天的状态概率: X 1 = ( 0.6 , 0.3 , 0.1 ) X^1=(0.6,0.3,0.1) X1=(0.6,0.3,0.1)
即今天是晴天的情况下,明天是晴天的概率为0.6,阴天的概率为0.3,雨天的概率为0.1
可以通过条件轻易知道我们的预测是正确的

再来预测下后天的 再来预测下后天的 再来预测下后天的
P j ( X j = 晴 ) = 0.6 × 0.6 + 0.1 × 0.3 + 0.7 × 0.1 = 0.46 P_j(X_j=晴)=0.6×0.6+0.1×0.3+0.7×0.1=0.46 Pj​(Xj​=晴)=0.6×0.6+0.1×0.3+0.7×0.1=0.46
P j ( X j = 阴 ) = 0.3 × 0.6 + 0.4 × 0.3 + 0.2 × 0.1 = 0.32 P_j(X_j=阴)=0.3×0.6+0.4×0.3+0.2×0.1=0.32 Pj​(Xj​=阴)=0.3×0.6+0.4×0.3+0.2×0.1=0.32
P j ( X j = 雨 ) = 0.1 × 0.6 + 0.5 × 0.3 + 0.1 × 0.1 = 0.22 P_j(X_j=雨)=0.1×0.6+0.5×0.3+0.1×0.1=0.22 Pj​(Xj​=雨)=0.1×0.6+0.5×0.3+0.1×0.1=0.22
后天的状态概率: X 2 = ( 0.46 , 0.32 , 0.22 ) X^2=(0.46,0.32,0.22) X2=(0.46,0.32,0.22)
即今天是晴天的情况下,明天是晴天的概率为0.46,阴天的概率为0.32,雨天的概率为0.22

四、Java代码实现

4.1 定义MarkovChain类

public class MarkovChain {
    private double[][] state;
    private final double[][] stateTransitionMatrix;
    MarkovChain(double[][] state,double[][] stateTransitionMatrix){
        this.state = state;
        this.stateTransitionMatrix = stateTransitionMatrix;
    }

    private static double[][] multiply(double[][] matrix1, double[][] matrix2) {
        if (matrix1[0].length != matrix2.length) {
            throw new IllegalArgumentException("第一个矩阵的列得等于第二个矩阵的行");
        }

        int rows1 = matrix1.length;
        int cols1 = matrix1[0].length;
        int cols2 = matrix2[0].length;
        double[][] result = new double[rows1][cols2];

        for (int i = 0; i < rows1; i++) {
            for (int j = 0; j < cols2; j++) {
                for (int k = 0; k < cols1; k++) {
                    result[i][j] += matrix1[i][k] * matrix2[k][j];
                }
            }
        }
        return result;
    }

    public double[][] markovChain(int n){
        if(n<0){
            throw new IllegalArgumentException("别搞事情,你让预知过去?");
        }

        if(n==0){
            return this.state;
        }else{
            return multiply(markovChain(n-1),this.stateTransitionMatrix);
        }
    }

    public double[][] getState() {
        return state;
    }

    public void setState(double[][] state) {
        this.state = state;
    }
}

4.2 展示

import java.util.Arrays;

public class Demo {
    public static void main(String[] args) {
        //三个(晴,阴,雨)的状态。
        //一个(晴晴,晴阴,晴雨)
        //   (阴晴,阴阴,阴雨)
        //   (雨晴,雨阴,雨雨)的状态转移矩阵
        double[][] state_01 = {{1,0,0}};
        double[][] state_02 = {{0,1,0}};
        double[][] state_03 = {{0,0,1}};
        double[][] stateTransitionMatrix = {{0.6,0.3,0.1},{0.1,0.4,0.5},{0.7,0.2,0.1}};
        //默认晴状态创建
        MarkovChain mc = new MarkovChain(state_01, stateTransitionMatrix);
        System.out.println(Arrays.deepToString(mc.markovChain(1)));
        System.out.println(Arrays.deepToString(mc.markovChain(2)));
        //确认状态输出100天后的预测结果
        System.out.println("-----分割线-----");
        System.out.println(Arrays.deepToString(mc.getState()));
        System.out.println(Arrays.deepToString(mc.markovChain(30)));
        System.out.println("-----分割线-----");
        System.out.println(Arrays.deepToString(mc.getState()));
        System.out.println(Arrays.deepToString(mc.markovChain(50)));
        System.out.println("-----分割线-----");
        System.out.println(Arrays.deepToString(mc.getState()));
        System.out.println(Arrays.deepToString(mc.markovChain(100)));
        //下一个状态
        System.out.println("-----分割线-----");
        mc.setState(state_02);
        System.out.println(Arrays.deepToString(mc.getState()));
        System.out.println(Arrays.deepToString(mc.markovChain(100)));
        //下一个状态
        System.out.println("-----分割线-----");
        mc.setState(state_03);
        System.out.println(Arrays.deepToString(mc.getState()));
        System.out.println(Arrays.deepToString(mc.markovChain(100)));
    }
}

五、马尔可夫的收敛性

上述代码尝试n=100,200,300发现后面结果相同了。这就是收敛性。

马尔可夫链的收敛性是其重要的性质之一。如果确定了马尔科夫链模型的状态转移矩阵P,以及一个初始状态,那么按照P转移n次后,马尔可夫链可能会收敛于一个特定的数或分布。这种收敛性在排名算法、概率计算等领域有广泛的应用。

东西很简单,但是我觉得思想很重要,状态和状态转移可以应用到很多地方上。

标签:Xj,Pij,Xi,0.1,马尔可夫,ij,晴天
From: https://blog.csdn.net/qq_52515420/article/details/136604585

相关文章

  • 马尔可夫决策理论
    马尔可夫决策理论马尔可夫性(无后效性)某阶段的状态一旦确定‚则此后过程的演变不再受此前各状态的影响。也就是说“未来与过去无关”当前的状态是此前历史的一个完整总结,此前的历史只能通过当前的状态去影响过程未来的演变。把握“当前的状态是此前历史的一个完整总结”这一要......
  • 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力
    分类预测|Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别目录分类预测|Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出。本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法:  sim<-svsim(1000,mu=-9,phi=0.97,sigma......
  • 「马尔可夫决策过程」学习笔记
    马尔可夫决策过程个人在学习「马尔可夫过程」时(基于这本教材,强烈推荐),做了些总结,并将遇到了一些感到困惑自我解答了,在此整理并记录一下。1.马尔可夫性质简单的一句话:当前状态只取决于上一时刻的状态。这个视频很生动地解释了这一性质。2.马尔可夫过程「马尔可夫过程」......
  • 动手学强化学习(三):马尔可夫决策过程
    转载自:https://hrl.boyuai.com/chapter/1/马尔可夫决策过程3.1简介马尔可夫决策过程(Markovdecisionprocess,MDP)是强化学习的重要概念。要学好强化学习,我们首先要掌握马尔可夫决策过程的基础知识。前两章所说的强化学习中的环境一般就是一个马尔可夫决策过程。与多臂老胡机问题......
  • 4.3 隐马尔可夫模型(HMM)
    原理:起始概率、发射概率和跳转概率三套参数可以完整地描述任意一个HMM模型起始概率:第一回合隐状态所有取值的概率发射概率:每一种隐状态可能对应的所有可观测状态的概率(发生某种隐状态的前提下再发生每种可观测状态的概率)转移状态:各个隐状态之间转换的概率应用:模型评估问......
  • R语言中实现马尔可夫链蒙特卡罗MCMC模型
    原文链接:http://tecdat.cn/?p=2687原文出处:拓端数据部落公众号 什么是MCMC,什么时候使用它?MCMC只是一个从分布抽样的算法。这只是众多算法之一。这个术语代表“马尔可夫链蒙特卡洛”,因为它是一种使用“马尔可夫链”(我们将在后面讨论)的“蒙特卡罗”(即随机)方法。MCMC只是蒙特卡......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • HanLP — HMM隐马尔可夫模型 -- 维特比(Viterbi)算法 --完整示例代码
    完成代码importpicklefromtqdmimporttqdmimportnumpyasnpimportosdefmake_label(text_str):"""从单词到label的转换,如:今天---->BE麻辣肥牛:--->BMME的--->S"""text_len=len(text_str)iftext_len==1:......
  • R语言中的马尔可夫区制转移(Markov regime switching)模型|附代码数据
    原文链接:http://tecdat.cn/?p=12187原文出处:拓端数据部落公众号最近我们被客户要求撰写关于马尔可夫区制转移模型的研究报告,包括一些图形和统计输出。金融分析师通常关心检测市场何时“发生变化”:几个月或至几年内市场的典型行为可以立即转变为非常不同的行为。投资者希望及时......