MCPcopy Create free account
hub / github.com/lazyprogrammer/machine_learning_examples / get_state_sequence

Method get_state_sequence

hmm_class/hmmc.py:194–221  ·  view source on GitHub ↗
(self, x)

Source from the content-addressed store, hash-verified

192 return alpha[-1].sum()
193
194 def get_state_sequence(self, x):
195 # returns the most likely state sequence given observed sequence x
196 # using the Viterbi algorithm
197 T = len(x)
198
199 # make the emission matrix B
200 B = np.zeros((self.M, T))
201 for j in range(self.M):
202 for t in range(T):
203 for k in range(self.K):
204 p = self.R[j,k] * mvn.pdf(x[t], self.mu[j,k], self.sigma[j,k])
205 B[j,t] += p
206
207 # perform Viterbi as usual
208 delta = np.zeros((T, self.M))
209 psi = np.zeros((T, self.M))
210 delta[0] = self.pi*B[:,0]
211 for t in range(1, T):
212 for j in range(self.M):
213 delta[t,j] = np.max(delta[t-1]*self.A[:,j]) * B[j,t]
214 psi[t,j] = np.argmax(delta[t-1]*self.A[:,j])
215
216 # backtrack
217 states = np.zeros(T, dtype=np.int32)
218 states[T-1] = np.argmax(delta[T-1])
219 for t in range(T-2, -1, -1):
220 states[t] = psi[t+1, states[t+1]]
221 return states
222
223 def likelihood_multi(self, X):
224 return np.array([self.likelihood(x) for x in X])

Callers 2

fake_signalFunction · 0.95
mainFunction · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected