HMM中的统一分布

时间:2016-02-18 16:38:05

标签: r hidden-markov-models

似乎我在我的假设中犯了一个错误。我想将HMM应用于一系列离散状态。这是一个探索性的分析,其中我不知道可能(或可能不是)潜在观察序列的假定隐藏状态。

版本1)

好。因此,我定义了少数状态并定义了统一的过渡和发射概率:

NUM.STATES = 6

states <- c() # we will create k dummy states
for (i in 1:NUM.STATES) {
  states <- c(states, paste0("State_", i))
}
start.probs <- rep(1.0 / NUM.STATES, NUM.STATES) # we assume equal probability for all states
trans.probs <- matrix(rep(start.probs, NUM.STATES), ncol=NUM.STATES, nrow=NUM.STATES)
rownames(trans.probs) <- colnames(trans.probs) <- states

symbols <- observations.alphabet
num.symbols <- length(symbols)
tmp.probs <- rep(1.0 / num.symbols, num.symbols) 
emit.probs <- matrix(rep(tmp.probs, NUM.STATES), ncol=num.symbols, nrow=NUM.STATES)
rownames(emit.probs) <- states
colnames(emit.probs) <- symbols
emit.probs <- t(emit.probs)

初始概率通常如下:

> trans.probs
          State_1   State_2   State_3   State_4   State_5   State_6
State_1 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
State_2 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
State_3 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
State_4 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
State_5 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
State_6 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667

> head(emit.probs)
                 State_1    State_2    State_3    State_4    State_5    State_6
A  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158
B  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158
C  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158
D  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158
E  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158
F  0.05263158 0.05263158 0.05263158 0.05263158 0.05263158 0.05263158

当我将具有这些初始参数的HMM拟合到一系列观察时,转换矩阵根本不会改变。

require(hmm.discnp)
tmp.hmm <- hmm(y=observation, yval=observations.alphabet, 
+                                    par0=par0, verbose=T)

      Initial set-up completed ...

Repeating ...

EM step 1:
     Log-likelihood: -648.1533
     Percent decrease in log-likelihood: 20.53143
     Root-SS of change in coef.: 0.630401
     Max. abs. change in coef.: 0.127874
EM step 2:
     Log-likelihood: -648.1533
     Percent decrease in log-likelihood: 0
     Root-SS of change in coef.: 0
     Max. abs. change in coef.: 0

> tmp.hmm$tpm
          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
[1,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[2,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[3,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[4,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[5,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
[6,] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667

可以看出,只有两次迭代后学习才会停止!我认为这证明了观察到的序列中没有真实的信息。

版本2)

但是,如果我使用trans.probs和emit.probs的随机初始化,它似乎会给出更合理的结果。

tmp.hmm <- hmm(y=observation, yval=observations.alphabet, 
                                   K=NUM.STATES, verbose=T, rand.start=list(tpm=T,Rho=T))

 Initial set-up completed ...

重复......

EM step 1:
     Log-likelihood: -645.833
     Percent decrease in log-likelihood: 23.1746
     Root-SS of change in coef.: 0.761316
     Max. abs. change in coef.: 0.306738
EM step 2:
     Log-likelihood: -643.9232
     Percent decrease in log-likelihood: 0.295714
     Root-SS of change in coef.: 0.075387
     Max. abs. change in coef.: 0.032037

(...)

EM step 63:
     Log-likelihood: -520.5877
     Percent decrease in log-likelihood: 9.8e-05
     Root-SS of change in coef.: 0.000836
     Max. abs. change in coef.: 0.000365

显然,现在的学习似乎有效。结果转换矩阵看起来也更有趣:

> tmp.hmm$tpm
             [,1]          [,2]         [,3]          [,4]         [,5]         [,6]
[1,] 3.821969e-35  6.218981e-72 9.804360e-01  1.956405e-02 9.371930e-79 3.591732e-38
[2,] 3.167994e-01  6.832006e-01 1.395910e-41  5.558022e-63 3.729498e-17 1.879235e-08
[3,] 2.922663e-01  5.705791e-02 1.918361e-01  2.948879e-02 2.427380e-10 4.293510e-01
[4,] 2.872490e-12 2.558908e-151 1.000000e+00  0.000000e+00 1.532313e-75 7.253783e-75
[5,] 1.866111e-32  4.066253e-01 2.264881e-51 3.583309e-101 5.930935e-01 2.811617e-04
[6,] 3.272425e-31  5.905480e-01 8.061218e-43  6.947626e-02 3.399757e-01 1.029613e-17

所以,问题是,两个设置之间有什么区别,哪个设置可以信任!?在版本1中我的缺陷在哪里,使用统一(&#34;无信息&#34;)先验概率!?

0 个答案:

没有答案