Esempio n. 1
0
    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)
Esempio n. 2
0
 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)
Esempio n. 3
0
    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)