zoukankan      html  css  js  c++  java
  • 马尔科夫模型

    本文部分内容摘自:

    [1]. Computer vision - a modern approch, section21.4. 2002. David A. Forths et al.

    [2]. 马尔科夫链

    -----------------------------------------------------------------------------------------------

    1. Markov chain

    2. Hidden Markov Modelson Discrete State Spaces

    state transition matrix中,第i行表示状态i转移到其它状态的概率,第j列表示其它状态转移到状态j的概率。

    在上面的推导中,$old{pi}$是列向量,推导得到的$X_1$是$P^T old{pi}$,如果$old{pi}$是行向量,则$X_1$是$old{pi} P$。

    3. Example of markov chain

    假设初始状态是牛市的概率0.3,熊市的概率是0.4,横盘的概率是0.3,即$old{pi}=[0.1, 0.7, 0.2]$,并假设一天股市状态转移一次,我们想知道后面每一天的股市情况。

    import numpy as np
    import matplotlib.pyplot as plt
    
    n = 30  # 状态转移次数
    states = np.zeros((n, 3))
    states[0, :] = [0.1, 0.7, 0.2]   # 初始状态
    trans_mat = np.array([[0.9, 0.075, 0.025], [0.15, 0.8, 0.05], [0.25, 0.25, 0.5]])   # 状态转移矩阵
    
    for i in range(n-1):
        states[i+1, :] = np.dot(states[i, :], trans_mat)
    print('after {} transitions'.format(n))
    print(states[n-1, :])
    
    plt.figure()
    plt.plot(range(n), states[:, 0], label='bull market')
    plt.plot(range(n), states[:, 1], label='bear market')
    plt.plot(range(n), states[:, 2], label='stagnant market')
    plt.xlabel('n')
    plt.ylabel('probability')
    plt.legend(loc='best')
    plt.show()

    运行结果:

    从图中我们可以看到,经过约20次状态转移后,概率分布不再变化,牛市的概率为0.624,熊市的概率为0.312,横盘的概率为0.062。

    即使初始状态设置为不同的值,最终的概率分布还是一样的,比如我们把初始值设为[0.6, 0.1, 0.3],运行程序的结果为:

    因此,马尔科夫链有这么一个性质:状态转移一定次数之后,概率分布将达到稳定状态,即使初始概率分布不同,最终也能达到稳定分布。

    但是,具备这个性质是需要一些前提条件的:

    • 任何两个状态是连通的:这个指的是从任意一个状态可以通过有限步到达其他的任意一个状态,不会出现条件概率一直为0导致不可达的情况。
    • 状态转移矩阵不会改变,即状态间的转移概率固定不变。
    • 不能是简单的循环,例如全是从x到y再从y到x。

    4. Applications of markov chain (to be continued)

    自然语言处理和语音

    一个字可以认为是一个状态,已知前面的字,预测后面可能出现的字,这就可以用到马尔科夫链了。

    ......

  • 相关阅读:
    isinstance函数
    Django之ORM那些相关操作
    Django ~ 2
    Django ~ 1
    Django详解之models操作
    Django模板语言相关内容
    livevent的几个问题
    客户端,服务器发包走向
    关闭客户端连接的两种情况
    std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义
  • 原文地址:https://www.cnblogs.com/picassooo/p/13330111.html
Copyright © 2011-2022 走看看