隱馬爾科夫鏈主要是兩部分:
第一部分:與傳統馬爾科夫過程一樣,都是乙個狀態轉移矩陣,假設是:當前狀態只與前一狀態有關;
第二部分:在某一狀態下會有乙個對應的觀測模型,不同狀態有不同的觀測模型;
這點與gmm都是一種兩級跳的思想,只是gmm選定的高斯分布之間沒有關聯,我這次哪個高斯部件來生成與上次選擇沒有關係,但是hmm前後有關係,不過只有一階;
用乙個圖表示如下:
(**於網際網路)
觀測序列為o1 o2 o3.......ot 每個觀測序列的背後都有乙個隱含狀態,而且這些隱含狀態之間有個跳轉概率,每個狀態對應乙個概率密度函式,該狀態依據這個概率密度函式來生成觀測值;說他是隱馬爾科夫鏈,正是因為,這個馬爾科夫過程隱藏在觀測值的背後;
hmm有三個引數:
1)初始狀態概率 pi ;
2)狀態之間的概率轉移矩陣a;
3)每個狀態對應的生成觀測模型b ;
有了這三個引數,我們就能完整的描述乙個隱馬爾科夫鏈。
關於這個模型,必然有其應用,其對應的三個問題如下:
1)概率計算的問題:最簡單的,我給定hmm的引數,求出觀測序列o1 o2 o3.......ot 的概率;
2)學習問題:我給出觀測序列o1 o2 o3.......ot 求出這個隱馬爾科夫模型的三個引數,這是個最大似然估計的問題;
3)解碼問題:給出觀測序列o1 o2 o3.......ot,求這個觀測背後的狀態序列s1 s2 s3.......st。
對於第乙個問題:(概率計算問題)
1)直接計算法
pi為初始狀態概率,中間的s是隱含狀態,因為對應的s狀態序列可能有多種可能性(假設有n種可能狀態,序列長度為k,那麼就有n的t次方個可能的狀態序列),因而對這個公式求和是乙個非常複雜的事情。因而這個方法僅僅作為理論推導使用,並不實用;
2)前向演算法
這種演算法類似於動態規劃,每一步利用前一步的結果,這樣就不需要重複計算,說他是前向演算法,源於其一步一步向前遞推的過程,動態規劃的演算法最重要的是要考慮好,每一步我要儲存什麼資料,這個資料對下一次的計算有用
用來儲存時間截止時間為t ,且 t 時刻狀態為 i,且觀測現象為o(t) 的概率,那麼根據遞推我們能得到
aji代表狀態轉移矩陣中從狀態 j 轉到狀態 i 的概率 bi(o(t+1))代表狀態為 i 的時候觀察值為o(t+1)的概率,通過這個簡單的遞推我們能得到
綜上我們根據觀測序列求出每一步的alpha
最後我們要求的值
**如下:
[cpp]view plain
copy
#include
using
namespace
std;
typedef
struct
namuna
numofstate=numofstate_input;
numofobs=numofobs_input;
pi=new
double
[numofstate];
a=(double
**)new
int[numofstate];
for(
inti=0;i
b=(double
**)new
int[numofstate];
for(
inti=0;i
} ~namuna()
delete
a;
for(
inti=0;i
delete
b;
} }namuna;
//輸出在給定模型引數情況下,當前觀測序列出現的概率
double
hmmqx(namuna &namuna_input,
int*pobs,
intnlenofobsseq);
intmain()
; cout
return
0;
} //pobs儲存的是時間為t時候的觀測值
double
hmmqx(namuna &namuna_input,
int*pobs,
intnlenofobsseq)
for(int
i=0;i
for(int
t=1;t
alpha[t][i]=tempsum*namuna_input.b[i][pobs[t]];
} }
double
dres=0.0;
for(
inti=0;i
return
dres;
}
3)後向演算法
第二個問題:(學習問題)
1)監督學習演算法
2)非監督學習演算法 baum-welch演算法,em在hmm中的具體實現
第三個問題:(解碼問題)
1)近似演算法
2)維特比演算法(這是很厲害的乙個演算法)
具體的以後再補充。(未完待續)
白話機器學習演算法(二)KNN
knn是一種分類演算法,在現實生活中,我們看乙個人怎麼樣,可以看他的朋友怎麼樣,至少說這樣推斷的可信度比較高 knn就是這種思想。1 初始化輸入為有標籤樣本 2 當我們得到乙個新樣本的時候,我們就看這個新樣本的半徑為r的周圍,各種有標籤樣本的比例,哪種標籤佔的比例最高,我們就給這個新樣本打上這個標籤...
白話機器學習演算法(四)K means
k means演算法是一種無監督聚類演算法,還是打個比方吧 1 現在房間裡有一群人,各自隨機站在房間裡,這時候有個上帝,隨機挑選了房間裡k個人當k個小組的領導 2 選完領導,每個人開始站隊了,找離自己最近的那個領導,表示自己是那一隊的 3 站完隊,大家開始不滿了,要求重新選領導,選誰?選這一小組的中...
白話機器學習演算法(七)LDA
lda也是一種線性變換,其整個證明過程與pca非常相似,找到目標函式,利用特徵值,但是其跟pca的目標是不同的,pca目的是在新座標系中方差最大,lda則是在新座標系中,類內方差盡量小,類間距離盡量大,並以這兩個指標定義乙個目標函式,通過最大化這個目標函式然後得到相應的對映方法,即新座標系 這兩者本...