因为看一篇题为 Passive Measurement of Interference in WiFi Network with Application in Misbehavior Detection的文章,学习了马尔科夫模型。之前一直主观觉得马尔科夫模型太难,看过之后其实不过如此,恰恰相反,这个模型本身还简化了原本复杂的概率网络。《模式识别》对马尔科夫和隐马尔可夫介绍得非常详尽易懂。马尔科夫模型是一个非常useful的工具。
几个重要概念:
马尔可夫假设:在一个随着时间观测到的对象序列中,T时刻观测到某对象的概率只和T-1时观测到的对象有关系。
马尔科夫模型的表示:
S:状态转换图中的状态集合
A:状态转移概率矩阵,aij表示从状态i迁移到状态j的概率
B:bij表示在状态i上观测到对象vj的概率
p:初始状态上观测到各值的概率,是一个向量
马尔科夫的三个核心问题:
估值问题(evaluation): 已知markov模型,和序列V,求观测到该序列的概率
解码问题(decoding):已知模型和t时刻观测到的Vt,求最可能观测到的序列
学习问题(Learning):已知状态集合S和观测序列V,求模型的各参数A,B,p
下面是evaluation代码(解码过程类似),前向算法
%% HMM model: A, B, initialstate, finalstate, %state transition propability A=[1 0 0 0; 0.2 0.3 0.1 0.4; 0.2 0.5 0.2 0.1; 0.8 0.1 0.0 0.1 ]; %b_jkv(t): v(t)'s occupation probability when the current state is w_j in time t B=[1 0 0 0 0; 0 0.3 0.4 0.1 0.2; 0 0.1 0.1 0.7 0.1; 0 0.5 0.2 0.1 0.2 ]; final_state=1; %the final state init_state=2; %the initial state %% observed sequence V=[2,4,3,1]; %visable sequence, v1 is the empty visable symbol. % # of states c=size(A); % # of time slots T=length(V); %% HMM forward algorithm : for evaluation problem of HMM: give a HMM model, calculate P(V) a=zeros(c, T); for t=1:T for j=1:c if t==1 a(j, t)=1*A(init_state, j)*B(j, V(t)); else sum=0; for i=1:c sum=sum+a(i, t-1)*A(i, j); end a(j, t) = B(j, V(t))*sum; end end end a(1, T)
学习问题:在MATLAB中集成了hmmestimate等函数,可以完成各种问题的解决。
summary: markov其实大致分为两部分,一部分是理解状态图中的概率迁移,以及markov假设;一部分是具体实现,由于markov问题的高复杂度,才出现了前向、后向算法,而那些算法的目的只是在多项式复杂度内进行求解。