DiscreteMarkovChain#

class pymc_extras.distributions.DiscreteMarkovChain(*args, steps=None, n_lags=1, **kwargs)[source]#

离散马尔可夫链是一个随机变量序列

\[\{x_t\}_{t=0}^T\]

其中转移概率 \(P(x_t | x_{t-1})\) 仅取决于系统在 \(x_{t-1}\) 的状态。

参数:
  • P (tensor) – 状态之间转移概率矩阵。行必须总和为 1。必须提供 P 或 P_logits 之一。

  • P_logit (tensor, optional) – 转移 logits 矩阵。通过 Softmax 激活转换为概率。必须提供 P 或 P_logits 之一。

  • steps (tensor, optional) – 马尔可夫链的长度。仅当未提供 state 时才需要。

  • init_dist (unnamed distribution, optional) –

    初始值的向量分布。Unnamed 指的是使用 .dist() API 创建的分布。分布应具有形状 n_states。如果不是,它将自动调整大小。

    警告

    init_dist 将被克隆,使其独立于作为输入传递的那个。

注释

初始分布将被克隆,使其与作为输入传递的分布不同。

示例

创建一个长度为 100,具有 3 个状态的马尔可夫链。状态数由 P 的形状给出,在本例中为 3。

import pymc as pm
import pymc_extras as pmx

with pm.Model() as markov_chain:
    P = pm.Dirichlet("P", a=[1, 1, 1], size=(3,))
    init_dist = pm.Categorical.dist(p = np.full(3, 1 / 3))
    markov_chain = pmx.DiscreteMarkovChain("markov_chain", P=P, init_dist=init_dist, shape=(100,))
__init__()#

方法

__init__()

dist([P, logit_P, steps, init_dist, n_lags])

创建一个与 cls 分布对应的张量变量。

rv_op(P, steps, init_dist, n_lags[, size])