matlab貝葉斯隱馬爾可夫hmm模型實現

原文連接:http://tecdat.cn/?p=7973

貝葉斯隱馬爾可夫模型是一種用於分割連續多變量數據的機率模型。該模型將數據解釋爲一系列隱藏狀態生成。每一個狀態都是重尾分佈的有限混合,具備特定於狀態的混合比例和共享的位置/分散參數。算法

該模型中的全部參數都配備有共軛先驗分佈,並經過變化的貝葉斯(vB)推理算法學習,其本質上與指望最大化類似。該算法對異常值具備魯棒性,而且能夠接受缺失值。學習

 本文從未知的BRHMM生成一組數據序列 參數,並僅從這些數據中估算出 生成它們的模型。 結果繪製爲 時間序列 spa

 設置狀態,符號和特徵的數量 

NumState=2; NumSym=3; NumFeat=5;

 設置序列數,每一個序列點數和缺失值 

NumSeq=2; NumPoint=100; NumMiss=20;

 設置參數生成選項。TransParam=1/5 

EmissParam=1/5; LocParam=2; DispParam=5;

 設置採樣選項 

NumDeg=5; NumObs=1000;

 打印 和顯示狀態 

fprintf('\n') fprintf('Sampling data ... ')

 生成用於採樣的參數 

[Trans,Emiss,Loc,Disp]=GenParam(NumState,NumSym,NumFeat,... TransParam,EmissParam,LocParam,DispParam);

 建立用於採樣的模型 

Obj= bhnn(NumState,NumSym,NumFeat);

 設置超參數 

Obj.TransWeight=Trans; Obj.TransStren(:)=NumObs; Obj.EmissWeight=Emiss; Obj.EmissStren(:)=NumObs; Obj.CompLoc=Loc; Obj.CompScale(:)=NumObs; Obj.CompDisp=Disp; Obj.CompPrec(:)=max(NumObs,NumFeat);

 採樣數據並隨機刪除值 

 更新狀態 

fprintf('Done\n') fprintf('Estimating model ... ')

 建立估計模型 

Obj=BHMM(NumState,NumSym,NumFeat);

 約束過渡參數 

Obj.TransWeight=Trans; Obj.TransStren(:)=NumObs;

 估計模型和狀態機率 

 更新狀態 

 

 繪製結果 

% 更新狀態 fprintf('Done\n') fprintf('\n') end

  

相關文章
相關標籤/搜索