def meanfieldupdate(self): J_init, h_init = np.linalg.inv(self.sigma_init), \ np.linalg.solve(self.sigma_init, self.mu_init) J_pair_22, J_pair_21, J_pair_11, _ = \ self.dynamics_distn._mf_expected_statistics() _, J_yx, J_node, _ = self.emission_distn._mf_expected_statistics() h_node = np.einsum('ti,ij->tj', self.data, J_yx) self._normalizer, self.smoothed_mus, self.smoothed_sigmas, \ E_xtp1_xtT = info_E_step( J_init,h_init,J_pair_11,J_pair_21,J_pair_22,J_node,h_node) self._set_expected_stats(self.smoothed_mus, self.smoothed_sigmas, E_xtp1_xtT)
def meanfieldupdate(self): J_init = np.linalg.inv(self.sigma_init) h_init = np.linalg.solve(self.sigma_init, self.mu_init) def get_params(distn): return mniw_expectedstats( *distn._natural_to_standard(distn.mf_natural_hypparam)) J_pair_22, J_pair_21, J_pair_11, logdet_pair = \ get_params(self.dynamics_distn) J_yy, J_yx, J_node, logdet_node = get_params(self.emission_distn) h_node = self.data.dot(J_yx) self._normalizer, self.smoothed_mus, self.smoothed_sigmas, \ E_xtp1_xtT = info_E_step( J_init,h_init,J_pair_11,-J_pair_21,J_pair_22,J_node,h_node) self._normalizer += self._info_extra_loglike_terms( J_init, h_init, logdet_pair, J_yy, logdet_node, self.data) self._set_expected_stats( self.smoothed_mus,self.smoothed_sigmas,E_xtp1_xtT)
def meanfieldupdate(self): J_init = np.linalg.inv(self.sigma_init) h_init = np.linalg.solve(self.sigma_init, self.mu_init) def get_params(distn): return mniw_expectedstats( *distn._natural_to_standard(distn.mf_natural_hypparam)) J_pair_22, J_pair_21, J_pair_11, logdet_pair = \ get_params(self.dynamics_distn) J_yy, J_yx, J_node, logdet_node = get_params(self.emission_distn) h_node = self.data.dot(J_yx) self._normalizer, self.smoothed_mus, self.smoothed_sigmas, \ E_xtp1_xtT = info_E_step( J_init,h_init,J_pair_11,-J_pair_21,J_pair_22,J_node,h_node) self._normalizer += self._info_extra_loglike_terms( J_init, h_init, logdet_pair, J_yy, logdet_node, self.data) self._set_expected_stats(self.smoothed_mus, self.smoothed_sigmas, E_xtp1_xtT)
def info_E_step(self): data = self.data A, sigma_states, C, sigma_obs = \ self.A, self.sigma_states, self.C, self.sigma_obs J_init = np.linalg.inv(self.sigma_init) h_init = np.linalg.solve(self.sigma_init, self.mu_init) J_pair_11 = A.T.dot(np.linalg.solve(sigma_states, A)) J_pair_21 = -np.linalg.solve(sigma_states, A) J_pair_22 = np.linalg.inv(sigma_states) J_node = C.T.dot(np.linalg.solve(sigma_obs, C)) h_node = np.einsum('ik,ij,tj->tk', C, np.linalg.inv(sigma_obs), data) self._normalizer, self.smoothed_mus, self.smoothed_sigmas, \ E_xtp1_xtT = info_E_step( J_init,h_init,J_pair_11,J_pair_21,J_pair_22,J_node,h_node) self._normalizer += self._extra_loglike_terms( self.A, self.sigma_states, self.C, self.sigma_obs, self.mu_init, self.sigma_init, self.data) self._set_expected_stats( self.smoothed_mus,self.smoothed_sigmas,E_xtp1_xtT)
def info_E_step(self): data = self.data A, sigma_states, C, sigma_obs = \ self.A, self.sigma_states, self.C, self.sigma_obs J_init = np.linalg.inv(self.sigma_init) h_init = np.linalg.solve(self.sigma_init, self.mu_init) J_pair_11 = A.T.dot(np.linalg.solve(sigma_states, A)) J_pair_21 = -np.linalg.solve(sigma_states, A) J_pair_22 = np.linalg.inv(sigma_states) J_node = C.T.dot(np.linalg.solve(sigma_obs, C)) h_node = np.einsum('ik,ij,tj->tk', C, np.linalg.inv(sigma_obs), data) self._normalizer, self.smoothed_mus, self.smoothed_sigmas, \ E_xtp1_xtT = info_E_step( J_init,h_init,J_pair_11,J_pair_21,J_pair_22,J_node,h_node) self._normalizer += self._extra_loglike_terms( self.A, self.sigma_states, self.C, self.sigma_obs, self.mu_init, self.sigma_init, self.data) self._set_expected_stats(self.smoothed_mus, self.smoothed_sigmas, E_xtp1_xtT)