Esempio n. 1
0
 def _do_backward_pass(self, framelogprob):
     n_samples, n_components = framelogprob.shape
     bwdlattice = np.zeros((n_samples, n_components))
     _hmmc._backward(n_samples, n_components,
                     log_mask_zero(self.startprob_),
                     log_mask_zero(self.transmat_), framelogprob,
                     bwdlattice)
     return bwdlattice
Esempio n. 2
0
    def _accumulate_sufficient_statistics(self, stats, X, framelogprob,
                                          posteriors, fwdlattice, bwdlattice):
        """Updates sufficient statistics from a given sample.

		Parameters
		----------
		stats : dict
			Sufficient statistics as returned by
			:meth:`~base._BaseHMM._initialize_sufficient_statistics`.

		X : array, shape (n_samples, n_features)
			Sample sequence.

		framelogprob : array, shape (n_samples, n_components)
			Log-probabilities of each sample under each of the model states.

		posteriors : array, shape (n_samples, n_components)
			Posterior probabilities of each sample being generated by each
			of the model states.

		fwdlattice, bwdlattice : array, shape (n_samples, n_components)
			Log-forward and log-backward probabilities.
		"""
        stats['nobs'] += 1
        if 's' in self.params:
            stats['start'] += posteriors[0]
        if 't' in self.params:
            n_samples, n_components = framelogprob.shape
            # when the sample is of length 1, it contains no transitions
            # so there is no reason to update our trans. matrix estimate
            if n_samples <= 1:
                return

            log_xi_sum = np.full((n_components, n_components), -np.inf)
            _hmmc._compute_log_xi_sum(n_samples, n_components, fwdlattice,
                                      log_mask_zero(self.transmat_),
                                      bwdlattice, framelogprob, log_xi_sum)
            stats['trans'] += np.exp(log_xi_sum)
Esempio n. 3
0
 def _do_forward_pass(self, framelogprob):
     n_samples, n_components = framelogprob.shape
     fwdlattice = np.zeros((n_samples, n_components))
     _hmmc._forward(n_samples, n_components, log_mask_zero(self.startprob_),
                    log_mask_zero(self.transmat_), framelogprob, fwdlattice)
     return logsumexp(fwdlattice[-1]), fwdlattice
Esempio n. 4
0
 def _do_viterbi_pass(self, framelogprob):
     n_samples, n_components = framelogprob.shape
     state_sequence, logprob = _hmmc._viterbi(
         n_samples, n_components, log_mask_zero(self.startprob_),
         log_mask_zero(self.transmat_), framelogprob)
     return logprob, state_sequence