Пример #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)
Пример #2
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)
Пример #3
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)
Пример #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)
Пример #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)
Пример #6
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)