def test_gradient_large_state(self): transitions = np.array([[0, 0, 1, 0], [1, 0, 1, 1], [0, 1, 1, 2], [1, 1, 1, 3], [0, 1, 0, 4], [1, 1, 0, 5]]) transition_parameters = np.array([1, 0, 2, 1, 3, -2], dtype='float64') x = np.array([[2, 3, -1], [1, 4, -2], [5, 2, -3], [-2, 5, 3]], dtype='float64') state_parameters = np.array([[[-1, 2], [3, -4]], [[5, -6], [7, 8]], [[-3, 6], [2, 13]]], dtype='float64') cy = 1 delta = 5.0**-4 K, S, W = state_parameters.shape for k in range(K): for s in range(S): for w in range(W): spd = np.zeros(state_parameters.shape, dtype='float64') spd[k, s, w] = delta ll0, dsp0, _ = log_likelihood(x, cy, state_parameters, transition_parameters, transitions) ll1, dsp1, _ = log_likelihood(x, cy, state_parameters + spd, transition_parameters, transitions) expected_der = (ll1 - ll0) / delta actual_der = dsp0[k, s, w] print k, s, w, ' ', expected_der, actual_der#, dsp0 self.assertAlmostEqual(expected_der, actual_der, places=2)
def test_gradient_large_transition(self): transitions = np.array([[0, 0, 1, 0], [1, 0, 1, 1], [0, 1, 1, 2], [1, 1, 1, 3], [0, 1, 0, 4], [1, 1, 0, 5]]) transition_parameters = np.array([1, -5, 20, 1, 3, -2], dtype='float64') x = np.array([[-2, 3, -1], [1, 4, -2], [4, -4, 2], [3, 5, 3]], dtype='float64') state_parameters = np.array([[[-1, 2], [3, -4]], [[5, -6], [7, 8]], [[-3, 6], [2, 13]]], dtype='float64') cy = 1 delta = 5.0**-5 for trans in range(len(transition_parameters)): tpd = np.zeros(transition_parameters.shape, dtype='float64') tpd[trans] = delta ll0, _, dtp0 = log_likelihood(x, cy, state_parameters, transition_parameters, transitions) ll1, _, dtp1 = log_likelihood(x, cy, state_parameters, transition_parameters + tpd, transitions) expected_der = (ll1 - ll0) / delta actual_der = dtp0[trans] print trans, ' ', expected_der, actual_der#, dsp0 #print ll1, ll0, delta #all_ders.append(abs(expected_der - actual_der) < 10.0**-2) self.assertAlmostEqual(expected_der, actual_der, places=2)
def test_gradient_small_transition(self): transitions = np.array([[0, 0, 0, 0], [1, 0, 0, 1]]) transition_parameters = np.array([1, 0], dtype='float64') x = np.array([[2, 3, -1]], dtype='float64').reshape(1, 3) state_parameters = np.array([[[-1, 2]], [[5, -6]], [[2, 13]]], dtype='float64') cy = 1 delta = 5.0**-5 for trans in range(len(transition_parameters)): tpd = np.zeros(transition_parameters.shape, dtype='float64') tpd[trans] = delta ll0, _, dtp0 = log_likelihood(x, cy, state_parameters, transition_parameters, transitions) ll1, _, dtp1 = log_likelihood(x, cy, state_parameters, transition_parameters + tpd, transitions) expected_der = (ll1 - ll0) / delta actual_der = dtp0[trans] print trans, ' ', expected_der, actual_der#, dsp0 #print ll1, ll0, delta self.assertAlmostEqual(expected_der, actual_der, places=2)