def test_2(): n_features = 3 length = 32 for n_states in [4]: t1 = np.random.randn(length, n_features) means = np.random.randn(n_states, n_features) vars = np.random.rand(n_states, n_features) transmat = np.random.rand(n_states, n_states) transmat = transmat / np.sum(transmat, axis=1)[:, None] startprob = np.random.rand(n_states) startprob = startprob / np.sum(startprob) chmm = GaussianHMMCPUImpl(n_states, n_features) chmm._sequences = [t1] pyhmm = GaussianHMM(n_components=n_states, init_params='', params='', covariance_type='diag') chmm.means_ = means.astype(np.float32) chmm.vars_ = vars.astype(np.float32) chmm.transmat_ = transmat.astype(np.float32) chmm.startprob_ = startprob.astype(np.float32) clogprob, cstats = chmm.do_estep() pyhmm.means_ = means pyhmm.covars_ = vars pyhmm.transmat_ = transmat pyhmm.startprob_ = startprob framelogprob = pyhmm._compute_log_likelihood(t1) fwdlattice = pyhmm._do_forward_pass(framelogprob)[1] bwdlattice = pyhmm._do_backward_pass(framelogprob) gamma = fwdlattice + bwdlattice posteriors = np.exp(gamma.T - logsumexp(gamma, axis=1)).T stats = pyhmm._initialize_sufficient_statistics() pyhmm._accumulate_sufficient_statistics(stats, t1, framelogprob, posteriors, fwdlattice, bwdlattice, 'stmc') yield lambda: np.testing.assert_array_almost_equal( stats['trans'], cstats['trans'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['post'], cstats['post'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['obs'], cstats['obs'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['obs**2'], cstats['obs**2'], decimal=3)
def test_2(): n_features = 3 length = 32 for n_states in [4]: t1 = np.random.randn(length, n_features) means = np.random.randn(n_states, n_features) vars = np.random.rand(n_states, n_features) transmat = np.random.rand(n_states, n_states) transmat = transmat / np.sum(transmat, axis=1)[:, None] startprob = np.random.rand(n_states) startprob = startprob / np.sum(startprob) chmm = GaussianHMMCPUImpl(n_states, n_features) chmm._sequences = [t1] pyhmm = GaussianHMM(n_components=n_states, init_params='', params='', covariance_type='diag') chmm.means_ = means.astype(np.float32) chmm.vars_ = vars.astype(np.float32) chmm.transmat_ = transmat.astype(np.float32) chmm.startprob_ = startprob.astype(np.float32) clogprob, cstats = chmm.do_estep() pyhmm.means_ = means pyhmm.covars_ = vars pyhmm.transmat_ = transmat pyhmm.startprob_ = startprob framelogprob = pyhmm._compute_log_likelihood(t1) fwdlattice = pyhmm._do_forward_pass(framelogprob)[1] bwdlattice = pyhmm._do_backward_pass(framelogprob) gamma = fwdlattice + bwdlattice posteriors = np.exp(gamma.T - logsumexp(gamma, axis=1)).T stats = pyhmm._initialize_sufficient_statistics() pyhmm._accumulate_sufficient_statistics( stats, t1, framelogprob, posteriors, fwdlattice, bwdlattice, 'stmc') yield lambda: np.testing.assert_array_almost_equal(stats['trans'], cstats['trans'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['post'], cstats['post'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['obs'], cstats['obs'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['obs**2'], cstats['obs**2'], decimal=3)
def predict(self, obs): """Find most likely state sequence corresponding to `obs`. Parameters ---------- obs : np.ndarray, shape=(n_samples, n_features) Sequence of n_features-dimensional data points. Each row corresponds to a single point in the sequence. Returns ------- hidden_states : np.ndarray, shape=(n_states) Index of the most likely states for each observation """ _, vl = scipy.linalg.eig(self.transmat_, left=True, right=False) startprob = vl[:, 0] / np.sum(vl[:, 0]) model = GaussianHMM(n_components=self.n_states, covariance_type='full') model.startprob_ = startprob model.transmat_ = self.transmat_ model.means_ = self.means_ model.covars_ = self.covars_ return model.predict(obs)
def predict(self, obs): """Find most likely state sequence corresponding to `obs`. Parameters ---------- obs : np.ndarray, shape=(n_samples, n_features) Sequence of n_features-dimensional data points. Each row corresponds to a single point in the sequence. Returns ------- hidden_states : np.ndarray, shape=(n_states) Index of the most likely states for each observation """ _, vl = scipy.linalg.eig(self.transmat_, left=True, right=False) startprob = vl[:, 0] / np.sum(vl[:, 0]) model = GaussianHMM(n_components=self.n_states, covariance_type='full') model.startprob_ = startprob model.transmat_ = self.transmat_ model.means_ = self.means_ model.covars_ = self.covars_ return model.predict(obs)
def test_2(): np.random.seed(42) n_features = 32 length = 20 #for n_states in [3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32]: for n_states in [8]: t1 = np.random.randn(length, n_features) means = np.random.randn(n_states, n_features) vars = np.random.rand(n_states, n_features) transmat = np.random.rand(n_states, n_states) transmat = transmat / np.sum(transmat, axis=1)[:, None] startprob = np.random.rand(n_states) startprob = startprob / np.sum(startprob) cuhmm = GaussianHMMCUDAImpl(n_states, n_features) cuhmm._sequences = [t1] pyhmm = GaussianHMM(n_components=n_states, init_params='', params='', covariance_type='diag') cuhmm.means_ = means cuhmm.vars_ = vars cuhmm.transmat_ = transmat cuhmm.startprob_ = startprob logprob, custats = cuhmm.do_estep() pyhmm.means_ = means pyhmm.covars_ = vars pyhmm.transmat_ = transmat pyhmm.startprob_ = startprob pyhmm._initialize_sufficient_statistics() framelogprob = pyhmm._compute_log_likelihood(t1) cuframelogprob = cuhmm._get_framelogprob() yield lambda: np.testing.assert_array_almost_equal(framelogprob, cuframelogprob, decimal=3) fwdlattice = pyhmm._do_forward_pass(framelogprob)[1] cufwdlattice = cuhmm._get_fwdlattice() yield lambda: np.testing.assert_array_almost_equal(fwdlattice, cufwdlattice, decimal=3) bwdlattice = pyhmm._do_backward_pass(framelogprob) cubwdlattice = cuhmm._get_bwdlattice() yield lambda: np.testing.assert_array_almost_equal(bwdlattice, cubwdlattice, decimal=3) gamma = fwdlattice + bwdlattice posteriors = np.exp(gamma.T - logsumexp(gamma, axis=1)).T cuposteriors = cuhmm._get_posteriors() yield lambda: np.testing.assert_array_almost_equal(posteriors, cuposteriors, decimal=3) stats = pyhmm._initialize_sufficient_statistics() pyhmm._accumulate_sufficient_statistics( stats, t1, framelogprob, posteriors, fwdlattice, bwdlattice, 'stmc') print 'ref transcounts' print transitioncounts(cufwdlattice, cubwdlattice, cuframelogprob, np.log(transmat)) print 'cutranscounts' print custats['trans'] yield lambda: np.testing.assert_array_almost_equal(stats['trans'], custats['trans'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['post'], custats['post'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['obs'], custats['obs'], decimal=3) yield lambda: np.testing.assert_array_almost_equal(stats['obs**2'], custats['obs**2'], decimal=3)
for i in xrange(n_clusters): print i idx = (viterbi_states==i) ax.plot_date(x_ax[idx],y_train[idx],'o',label='%dth state'%i) ax.legend() ax.set_ylabel('Load (Mlb/Hr)') ax.set_xlabel('Time') ax.grid(True) plt.show() ############################################################################## #create a new model modelw = GaussianHMM(n_clusters,covariance_type='diag',n_iter=1000) modelw._means_ = model.means_[:,1:] modelw._covars_ = [item[1:,1:] for item in model.covars_] modelw.transmat_ = model.transmat_ modelw.n_features = model.n_features-1 modelw.startprob_ = model.startprob_ ############################################################################## #RUN ENSEMBLE def run_ensemble(X_train,y_train,X_test,y_test): hours = X_train.index.map(lambda x: x.hour) test_hours = X_test.index.map(lambda x: x.hour) y_svr = [] y_gbr = [] for i in xrange(24): X_train_hourly = X_train[hours==i] y_train_hourly = y_train[hours==i] X_test_hourly = X_test[test_hours==i] from sklearn.svm import SVR
def test_2(): np.random.seed(42) n_features = 32 length = 20 #for n_states in [3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32]: for n_states in [8]: t1 = np.random.randn(length, n_features) means = np.random.randn(n_states, n_features) vars = np.random.rand(n_states, n_features) transmat = np.random.rand(n_states, n_states) transmat = transmat / np.sum(transmat, axis=1)[:, None] startprob = np.random.rand(n_states) startprob = startprob / np.sum(startprob) cuhmm = GaussianHMMCUDAImpl(n_states, n_features) cuhmm._sequences = [t1] pyhmm = GaussianHMM(n_components=n_states, init_params='', params='', covariance_type='diag') cuhmm.means_ = means cuhmm.vars_ = vars cuhmm.transmat_ = transmat cuhmm.startprob_ = startprob logprob, custats = cuhmm.do_estep() pyhmm.means_ = means pyhmm.covars_ = vars pyhmm.transmat_ = transmat pyhmm.startprob_ = startprob pyhmm._initialize_sufficient_statistics() framelogprob = pyhmm._compute_log_likelihood(t1) cuframelogprob = cuhmm._get_framelogprob() yield lambda: np.testing.assert_array_almost_equal( framelogprob, cuframelogprob, decimal=3) fwdlattice = pyhmm._do_forward_pass(framelogprob)[1] cufwdlattice = cuhmm._get_fwdlattice() yield lambda: np.testing.assert_array_almost_equal( fwdlattice, cufwdlattice, decimal=3) bwdlattice = pyhmm._do_backward_pass(framelogprob) cubwdlattice = cuhmm._get_bwdlattice() yield lambda: np.testing.assert_array_almost_equal( bwdlattice, cubwdlattice, decimal=3) gamma = fwdlattice + bwdlattice posteriors = np.exp(gamma.T - logsumexp(gamma, axis=1)).T cuposteriors = cuhmm._get_posteriors() yield lambda: np.testing.assert_array_almost_equal( posteriors, cuposteriors, decimal=3) stats = pyhmm._initialize_sufficient_statistics() pyhmm._accumulate_sufficient_statistics(stats, t1, framelogprob, posteriors, fwdlattice, bwdlattice, 'stmc') print 'ref transcounts' print transitioncounts(cufwdlattice, cubwdlattice, cuframelogprob, np.log(transmat)) print 'cutranscounts' print custats['trans'] yield lambda: np.testing.assert_array_almost_equal( stats['trans'], custats['trans'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['post'], custats['post'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['obs'], custats['obs'], decimal=3) yield lambda: np.testing.assert_array_almost_equal( stats['obs**2'], custats['obs**2'], decimal=3)