def testWithMixgaussInit(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em(data=self.obs, prior=self.prior0, transmat=self.transmat0, mu=self.mu0, Sigma=self.Sigma0, mixmat=self.mixmat0)
def testStateHiddenParams(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em(data=self.obs, prior=self.prior0, transmat=self.transmat0, mu=self.mu, Sigma=self.Sigma, mixmat=self.mixmat) assert np.all(np.diff(LL)>=-1e-3) # Likelihood is increasing assert np.all(np.abs(self.prior-prior1)<1e-3) assert np.all(np.abs(self.transmat-transmat1)<1e-3)
def testWithMixgaussInit(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em( data=self.obs, prior=self.prior0, transmat=self.transmat0, mu=self.mu0, Sigma=self.Sigma0, mixmat=self.mixmat0)
def testStateEmissionParams(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em(data=self.obs, prior=self.prior, transmat=self.transmat, mu=self.mu0, Sigma=self.Sigma0, mixmat=self.mixmat0) assert np.all(np.diff(LL)>=-1e-3) # Likelihood is increasing assert np.all(np.abs(mu1-self.mu)<1e-1) assert np.all(np.abs(Sigma1-self.Sigma)<1e-1) assert np.all(np.abs(mixmat1-self.mixmat)<1e-1)
def testStateHiddenParams(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em( data=self.obs, prior=self.prior0, transmat=self.transmat0, mu=self.mu, Sigma=self.Sigma, mixmat=self.mixmat) assert np.all(np.diff(LL) >= -1e-3) # Likelihood is increasing assert np.all(np.abs(self.prior - prior1) < 1e-3) assert np.all(np.abs(self.transmat - transmat1) < 1e-3)
def testStateEmissionParams(self): LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em( data=self.obs, prior=self.prior, transmat=self.transmat, mu=self.mu0, Sigma=self.Sigma0, mixmat=self.mixmat0) assert np.all(np.diff(LL) >= -1e-3) # Likelihood is increasing assert np.all(np.abs(mu1 - self.mu) < 1e-1) assert np.all(np.abs(Sigma1 - self.Sigma) < 1e-1) assert np.all(np.abs(mixmat1 - self.mixmat) < 1e-1)
def fit(self, obs): obs = self._convertObs(obs) O = obs[0].shape[0] M = self.n_mix Q = self.n_components if 's' in self.init_params: self.startprob_, _ = normalise(self.startprob_) if 't' in self.init_params: self.transmat_, _ = mk_stochastic(self.transmat_) if 'm' in self.init_params or 'c' in self.init_params: mu0, Sigma0, weights0 = mixgauss_init( Q * M, obs, cov_type=self._covariance_type) if 'm' in self.init_params: self.means_ = np.transpose(np.reshape(mu0, (O, M, Q)), (0, 2, 1)) if 'c' in self.init_params: self.covars_ = np.transpose(np.reshape(Sigma0, (O, O, M, Q)), (0, 1, 3, 2)) mixmat0, _ = mk_stochastic(np.random.rand(Q, M)) self.LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em( data=obs, prior=self.startprob_, transmat=self.transmat_, mu=self.means_, Sigma=self.covars_, mixmat=mixmat0, max_iter=self.n_iter, thresh=self.thresh, cov_type=self._covariance_type, adj_trans='t' in self.params, adj_mix='w' in self.params, adj_mu='m' in self.params, adj_Sigma='c' in self.params) self.startprob_ = prior1 self.transmat_ = transmat1 self.means_ = mu1 self.covars_ = Sigma1 self.weights_ = mixmat1
def fit(self, obs): obs = self._convertObs(obs) O = obs[0].shape[0] M = self.n_mix Q = self.n_components if "s" in self.init_params: self.startprob_, _ = normalise(self.startprob_) if "t" in self.init_params: self.transmat_, _ = mk_stochastic(self.transmat_) if "m" in self.init_params or "c" in self.init_params: mu0, Sigma0, weights0 = mixgauss_init(Q * M, obs, cov_type=self._covariance_type) if "m" in self.init_params: self.means_ = np.transpose(np.reshape(mu0, (O, M, Q)), (0, 2, 1)) if "c" in self.init_params: self.covars_ = np.transpose(np.reshape(Sigma0, (O, O, M, Q)), (0, 1, 3, 2)) mixmat0, _ = mk_stochastic(np.random.rand(Q, M)) self.LL, prior1, transmat1, mu1, Sigma1, mixmat1 = mhmm_em( data=obs, prior=self.startprob_, transmat=self.transmat_, mu=self.means_, Sigma=self.covars_, mixmat=mixmat0, max_iter=self.n_iter, thresh=self.thresh, cov_type=self._covariance_type, adj_trans="t" in self.params, adj_mix="w" in self.params, adj_mu="m" in self.params, adj_Sigma="c" in self.params, ) self.startprob_ = prior1 self.transmat_ = transmat1 self.means_ = mu1 self.covars_ = Sigma1 self.weights_ = mixmat1