七、前向-後向演算法(forward-backward algorithm)
上一節我們定義了兩個變數及相應的期望值,本節我們利用這兩個變數及其期望值來重新估計隱馬爾科夫模型(hmm)的引數pi,a及b:
前向-後向演算法程式示例如下(在baum.c中):
void baumwelch(hmm *phmm, int t, int *o, double **alpha, double **beta, double **gamma, int *pniter, double *plogprobinit, double *plogprobfinal)
denominatorb = denominatora + gamma[t][i];
for (k = 1; k <= phmm->m; k++)
phmm->b[i][k] = .001 +
.999*numeratorb/denominatorb;}}
forwardwithscale(phmm, t, o, alpha, scale, &logprobf);
backwardwithscale(phmm, t, o, beta, scale, &logprobb);
computegamma(phmm, t, alpha, beta, gamma);
computexi(phmm, t, o, alpha, beta, xi);
/* compute difference between log probability of
two iterations */
delta = logprobf - logprobprev;
logprobprev = logprobf;
l++;
} while (delta > delta); /* if log probability does not
change much, exit */
*pniter = l;
*plogprobfinal = logprobf; /* log p(o|estimated model) */
freexi(xi, t, phmm->n);
free_dvector(scale, 1, t);
}
前向-後向演算法就到此為止了。
未完待續:總結
HMM學習最佳範例七 前向 後向演算法3
七 前向 後向演算法 forward backward algorithm 前向 後向演算法是baum於1972年提出來的,又稱之為baum welch演算法,雖然它是em expectation maximization 演算法的乙個特例,但em演算法卻是於1977年提出的。那麼為什麼說前向 後向...
HMM學習最佳範例五 前向演算法3
五 前向演算法 forward algorithm 前向演算法定義 forward algorithm definition 我們使用前向演算法計算t長觀察序列的概率 其中y的每乙個是觀察集合之一。區域性 中間 概率 s 是遞迴計算的,首先通過計算t 1時刻所有狀態的區域性概率 也就是當前狀態相應的...
HMM學習最佳範例一 介紹
一 介紹 introduction 我們通常都習慣尋找乙個事物在一段時間裡的變化模式 規律 這些模式發生在很多領域,比如計算機中的指令序列,句子中的詞語順序和口語單詞中的音素序列等等,事實上任何領域中的一系列事件都有可能產生有用的模式。考慮乙個簡單的例子,有人試圖通過一片海藻推斷天氣 民間傳說告訴我...