📜  马尔可夫链

📅  最后修改于: 2022-05-13 01:56:11.860000             🧑  作者: Mango

马尔可夫链

马尔可夫链,以安德烈马尔科夫命名,这是一个随机模型,描述了一系列可能的事件,其中下一个状态的预测或概率仅基于其先前的事件状态,而不是之前的状态。简而言之,第n +1 步为 x 的概率仅取决于第 n 步,而不取决于 n 之前的完整步骤序列。此属性称为马尔可夫属性或无记忆性。让我们借助图表探索我们的马尔可夫链,

是马尔可夫过程

表示两态(此处为 E 和 A)马尔可夫过程的图。这里的箭头源自当前状态并指向未来状态,与箭头相关的数字表示马尔可夫过程从一种状态变为另一种状态的概率。例如,如果马尔可夫过程处于状态 E,那么它变为状态 A 的概率是 0.7,而它保持在相同状态的概率是 0.3。类似地,对于状态 A 中的任何进程,变为 Estate 的概率为 0.4,保持相同状态的概率为 0.6。

如何表示马尔可夫链?

从两态马尔可夫过程图可以看出,马尔可夫链是一个有向图。所以我们可以借助邻接矩阵来表示它。

+——+——+

|一个 | E | — 每个元素表示边缘的概率权重

+——+——+——+ 连接对应的两个顶点

|一个 | 0.6 | 0.4 | — 0.4 是状态 A 进入状态 E 的概率,0.6 是概率

+——+——+——+ 保持相同的状态

| E | 0.7 | 0.3 | — 0.7 是状态 E 进入状态 A 的概率,0.3 是概率

+——+——+——+ 保持相同的状态

该矩阵也称为转移矩阵。如果马尔可夫链有 N 个可能的状态,则矩阵将是 NxN 矩阵。该矩阵的每一行总和应为 1。除此之外,马尔可夫链还具有 Nx1 阶的初始状态向量。这两个实体是表示马尔可夫链的必要条件。

N 步转移矩阵:现在让我们学习高阶转移矩阵。它帮助我们找到在多个步骤中发生这种转变的机会。简而言之,经过 N 步从状态 A 移动到状态 E 的概率是多少?实际上有一种非常简单的计算方法。这可以通过计算通过将转移矩阵提升到 N 次方获得的矩阵的条目 (A, ) 的值来确定。

马尔可夫链的类型:

离散时间马尔可夫链:这意味着索引集 T(时间 t 的过程状态)在这里是一个可数集,或者我们可以说变化发生在特定状态。通常,术语“马尔可夫链”用于 DTMC。

连续时间马尔可夫链:这里的索引集 T(时间 t 的过程状态)是一个连续统一体,这意味着 CTMC 中的变化是连续的。

马尔可夫链的性质:

  1. 如果我们可以在一个或多个步骤中从一种状态转到另一种状态,则称马尔可夫链是不可约的。
  2. 如果返回马尔可夫链中的状态需要大于 1 的某个整数的倍数,则称该状态为周期性的,所有可能的返回路径长度的最大公约数将是该状态的周期。
  3. 如果马尔可夫链中的状态永远不会返回相同状态的非零概率,则称该状态为瞬态,否则为循环。
  4. 如果无法离开该状态,则马尔可夫链中的状态称为吸收。吸收状态没有任何来自它的传出转换。

Python中的马尔可夫链:

Python3
# let's import our library
import scipy.linalg
import numpy as np
 
 
# Encoding this states to numbers as it
# is easier to deal with numbers instead
# of words.
state = ["A", "E"]
 
# Assigning the transition matrix to a variable
# i.e a numpy 2d matrix.
MyMatrix = np.array([[0.6, 0.4], [0.7, 0.3]])
 
# Simulating a random walk on our Markov chain
# with 20 steps. Random walk simply means that
# we start with an arbitrary state and then we
# move along our markov chain.
n = 20
 
# decide which state to start with
StartingState = 0
CurrentState = StartingState
 
# printing the stating state using state
# dictionary
print(state[CurrentState], "--->", end=" ")
 
while n-1:
    # Deciding the next state using a random.choice()
    # function,that takes list of states and the probability
    # to go to the next states from our current state
    CurrentState = np.random.choice([0, 1], p=MyMatrix[CurrentState])
     
    # printing the path of random walk
    print(state[CurrentState], "--->", end=" ")
    n -= 1
print("stop")
 
# Let us find the stationary distribution of our
# Markov chain by Finding Left Eigen Vectors
# We only need the left eigen vectors
MyValues, left = scipy.linalg.eig(MyMatrix, right=False, left=True)
 
print("left eigen vectors = \n", left, "\n")
print("eigen values = \n", MyValues)
 
# Pi is a probability distribution so the sum of
# the probabilities should be 1 To get that from
# the above negative values we just have to normalize
pi = left[:, 0]
pi_normalized = [(x/np.sum(pi)).real for x in pi]
pi_normalized


马尔可夫链的应用:

马尔可夫链使对许多现实世界过程的研究更加简单易懂。使用马尔可夫链,我们可以得出一些有用的结果,例如平稳分布等等。

  1. MCMC(Markov Chain Monte Carlo),它为归一化因子带来的问题提供了一个解决方案,它是基于马尔可夫链的。
  2. 马尔可夫链用于信息论、搜索引擎、语音识别等。
  3. 马尔可夫链在数据科学领域具有巨大的可能性、未来和重要性,请有兴趣的读者正确学习这些东西,以成为数据科学领域的胜任者。

马尔可夫链的假设:

  1. 统计系统包含有限数量的状态。
  2. 这些状态是相互排斥的,并且集体是穷举的。
  3. 从一种状态到另一种状态的转移概率随着时间的推移是恒定的。

马尔可夫过程在现实生活中的问题中相当普遍,马尔可夫链由于其无记忆性而可以很容易地实现。使用马尔可夫链可以在不影响其准确性的情况下简化问题。

让我们举个例子来了解这个工具的好处,假设我的朋友建议吃饭。我可以说我不想像一小时前那样吃披萨。但是,如果我说我不想要披萨,因为我两个月前有披萨,是否合适?这意味着在这种情况下,我选择一餐的可能性完全取决于我的前一餐。这是马尔可夫链的有效性。