#!/usr/bin/env python # coding: utf-8 # 状态集合\begin{align*} & Q=\left\{q_{1},q_{2},\ldots ,q_{N}\right\} \quad \left| Q\right| =N \end{align*} # 观测集合\begin{align*} & V=\left\{v_{1},v_{2},\ldots ,v_{M}\right\} \quad \left| V\right| =M \end{align*} # 状态序列\begin{align*} & I=\left\{i_{1},i_{2},\ldots ,i_{t},\ldots,i_{T}\right\} \quad i_{t}\in Q \quad \left(t=1,2,\ldots,T \right)\end{align*} # 观测序列\begin{align*} & O=\left\{o_{1},o_{2},\ldots ,o_{t},\ldots,o_{T}\right\} \quad o_{t}\in V \quad \left(t=1,2,\ldots,T \right)\end{align*} # 状态转移矩阵 \begin{align*} & A=\left[a_{ij}\right]_{N\times N} \end{align*} # 在$t$时刻处于状态$q_{i}$的条件下,在$t+1$时刻转移到状态$q_{j}$的概率\begin{align*} & a_{ij}= P\left( i_{t+1}=q_{j}|i_{t}=q_{i}\right) \quad \left(i=1,2,\ldots,N \right) \quad \left(j=1,2,\ldots,M \right)\end{align*} # 观测概率矩阵\begin{align*} & B=\left[b_{j}\left(k\right)\right]_{N\times M} \end{align*} # 在$t$时刻处于状态$q_{i}$的条件下,生成观测$v_{k}$的概率\begin{align*} & b_{j}\left(k\right)= P\left( o_{t}=v_{k}|i_{t}=q_{j}\right) \quad \left(k=1,2,\ldots,M \right) \quad \left(j=1,2,\ldots,N \right)\end{align*} # 初始概率向量\begin{align*} & \pi =\left( \pi _{i}\right) \end{align*} # 在时刻$t=1$处于状态$q_{i}$的概率\begin{align*} & \pi_{i} =P\left( i_{1}=q_{i}\right) \quad \left(i=1,2,\ldots,N \right) \end{align*} # 隐马尔科夫模型\begin{align*} & \lambda =\left( A,B.\pi \right) \end{align*} # 隐马尔科夫模型基本假设: # 1. 齐次马尔科夫性假设:在任意时刻$t$的状态只依赖于时刻$t-1$的状态。\begin{align*} & P\left( i_{t}|i_{t-1},o_{t-1},\ldots,i_{1},o_{1}\right)=P\left(i_{t}|i_{t-1}\right) \quad \left(t=1,2,\ldots,T\right) \end{align*} # 2. 观测独立性假设:任意时刻$t$的观测只依赖于时刻$t$的状态。\begin{align*} & P\left( o_{t}|i_{T},o_{T},i_{T-1},o_{T-1},\ldots,i_{t+1},o_{t+1},i_{t},i_{t-1},o_{t-1},\ldots,i_{1},o_{1}\right)=P\left(o_{t}|i_{t}\right) \quad \left(t=1,2,\ldots,T\right) \end{align*} # 观测序列生成算法: # 输入:隐马尔科夫模型$\lambda =\left( A,B.\pi \right)$,观测序列长度$T$; # 输出:观测序列$O=\left\{o_{1},o_{2},\ldots ,o_{t},\ldots,o_{T}\right\}$; # 1. 由初始概率向量$\pi$产生状态$i_{1}$; # 2. $t=1$; # 3. 由状态$i_{t}$的观测概率分布$b_{j}\left(k\right)$生成$o_{t}$; # 4. 由状态$i_{t}$的状态转移概率分布$a_{i_{t}i_{t+1}}$生成状态$i_{t+1} \quad \left(i_{t+1}=1,2,\ldots,N\right)$; # 5. $t=t+1$;如果$t