Exemple #1
0
def check_extra_loglike_terms(A, B, C, D, mu_init, sigma_init, data):
    ex1 = LDSStates._extra_loglike_terms(
        A, B.dot(B.T), C, D.dot(D.T), mu_init, sigma_init, data)
    ex2 = LDSStates._info_extra_loglike_terms(
        *extra_info_params(A, B, C, D, mu_init, sigma_init, data))

    assert np.isclose(ex1, ex2)
def check_extra_loglike_terms(A, B, C, D, mu_init, sigma_init, data):
    ex1 = LDSStates._extra_loglike_terms(A, B.dot(B.T), C, D.dot(D.T), mu_init,
                                         sigma_init, data)
    ex2 = LDSStates._info_extra_loglike_terms(
        *extra_info_params(A, B, C, D, mu_init, sigma_init, data))

    assert np.isclose(ex1, ex2)
def check_filters(A, B, C, D, mu_init, sigma_init, data):
    def info_normalizer(J, h):
        out = 0.
        out += 1 / 2. * h.dot(np.linalg.solve(J, h))
        out -= 1 / 2. * np.linalg.slogdet(J)[1]
        out += h.shape[0] / 2. * np.log(2 * np.pi)
        return out

    ll, filtered_mus, filtered_sigmas = kalman_filter(mu_init, sigma_init, A,
                                                      B.dot(B.T), C,
                                                      D.dot(D.T), data)
    py_partial_ll = info_normalizer(
        *dense_infoparams(A, B, C, D, mu_init, sigma_init, data))
    partial_ll, filtered_Js, filtered_hs = kalman_info_filter(
        *info_params(A, B, C, D, mu_init, sigma_init, data))

    ll2 = partial_ll + LDSStates._extra_loglike_terms(A, B.dot(
        B.T), C, D.dot(D.T), mu_init, sigma_init, data)
    filtered_mus2 = [
        np.linalg.solve(J, h) for J, h in zip(filtered_Js, filtered_hs)
    ]
    filtered_sigmas2 = [np.linalg.inv(J) for J in filtered_Js]

    assert all(
        np.allclose(mu1, mu2) for mu1, mu2 in zip(filtered_mus, filtered_mus2))
    assert all(
        np.allclose(s1, s2)
        for s1, s2 in zip(filtered_sigmas, filtered_sigmas2))

    assert np.isclose(partial_ll, py_partial_ll)
    assert np.isclose(ll, ll2)
Exemple #4
0
def check_filters(A, B, C, D, mu_init, sigma_init, data):
    def info_normalizer(J,h):
        out = 0.
        out += 1/2. * h.dot(np.linalg.solve(J,h))
        out -= 1/2. * np.linalg.slogdet(J)[1]
        out += h.shape[0]/2. * np.log(2*np.pi)
        return out

    ll, filtered_mus, filtered_sigmas = kalman_filter(
        mu_init, sigma_init, A, B.dot(B.T), C, D.dot(D.T), data)
    py_partial_ll = info_normalizer(*dense_infoparams(
        A, B, C, D, mu_init, sigma_init, data))
    partial_ll, filtered_Js, filtered_hs = kalman_info_filter(
        *info_params(A, B, C, D, mu_init, sigma_init, data))

    ll2 = partial_ll + LDSStates._extra_loglike_terms(
        A, B.dot(B.T), C, D.dot(D.T), mu_init, sigma_init, data)
    filtered_mus2 = [np.linalg.solve(J,h) for J, h in zip(filtered_Js, filtered_hs)]
    filtered_sigmas2 = [np.linalg.inv(J) for J in filtered_Js]

    assert all(np.allclose(mu1, mu2)
               for mu1, mu2 in zip(filtered_mus, filtered_mus2))
    assert all(np.allclose(s1, s2)
               for s1, s2 in zip(filtered_sigmas, filtered_sigmas2))

    assert np.isclose(partial_ll, py_partial_ll)
    assert np.isclose(ll, ll2)
Exemple #5
0
def check_info_Estep(A, B, C, D, mu_init, sigma_init, data):
    ll, smoothed_mus, smoothed_sigmas, ExnxT = E_step(
        mu_init, sigma_init, A, B.dot(B.T), C, D.dot(D.T), data)
    partial_ll, smoothed_mus2, smoothed_sigmas2, ExnxT2 = info_E_step(
        *info_params(A, B, C, D, mu_init, sigma_init, data))

    ll2 = partial_ll + LDSStates._extra_loglike_terms(
        A, B.dot(B.T), C, D.dot(D.T), mu_init, sigma_init, data)

    assert np.isclose(ll,ll2)
    assert np.allclose(smoothed_mus, smoothed_mus2)
    assert np.allclose(smoothed_sigmas, smoothed_sigmas2)
    assert np.allclose(ExnxT, ExnxT2)
def check_info_Estep(A, B, C, D, mu_init, sigma_init, data):
    ll, smoothed_mus, smoothed_sigmas, ExnxT = E_step(mu_init, sigma_init, A,
                                                      B.dot(B.T), C,
                                                      D.dot(D.T), data)
    partial_ll, smoothed_mus2, smoothed_sigmas2, ExnxT2 = info_E_step(
        *info_params(A, B, C, D, mu_init, sigma_init, data))

    ll2 = partial_ll + LDSStates._extra_loglike_terms(A, B.dot(
        B.T), C, D.dot(D.T), mu_init, sigma_init, data)

    assert np.isclose(ll, ll2)
    assert np.allclose(smoothed_mus, smoothed_mus2)
    assert np.allclose(smoothed_sigmas, smoothed_sigmas2)
    assert np.allclose(ExnxT, ExnxT2)
Exemple #7
0
    def meanfield_update_gaussian_states(self):
        J_init = np.linalg.inv(self.sigma_init)
        h_init = np.linalg.solve(self.sigma_init, self.mu_init)

        def get_paramseq(distns):
            contract = partial(np.tensordot, self.expected_states, axes=1)
            std_param = lambda d: d._natural_to_standard(d.mf_natural_hypparam)
            params = [mniw_expectedstats(*std_param(d)) for d in distns]
            return map(contract, zip(*params))

        J_pair_22, J_pair_21, J_pair_11, logdet_pair = \
            get_paramseq(self.dynamics_distns)
        J_yy, J_yx, J_node, logdet_node = get_paramseq(self.emission_distns)
        h_node = np.einsum('ni,nij->nj', self.data, J_yx)

        self._mf_lds_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._mf_lds_normalizer += LDSStates._info_extra_loglike_terms(
            J_init, h_init, logdet_pair, J_yy, logdet_node, self.data)

        self._set_gaussian_expected_stats(
            self.smoothed_mus,self.smoothed_sigmas,E_xtp1_xtT)