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)
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)
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)