def test_clear_all_sets(self):
     builder = Builder()
     builder.add_training_example(self._obs[0], self._states[0])
     builder.clear_all_sets()
     self.assertEqual(len(builder._obs_sequences), 0)
     self.assertEqual(len(builder._state_sequences), 0)
     self.assertIsNone(builder._single_states)
     self.assertIsNone(builder._all_obs)
Пример #2
0
def trainmodel():
    builder = Builder()
    builder.set_all_obs(getobs(inputfile))
    builder.set_single_states(getallstates())
    print("start learning")
    hmm = builder.build(highest_order=2, k_smoothing=0.001)
    print(hmm.get_parameters())
    with open('hmm.txt', 'a', encoding='utf-8') as f:
        f.write(str(hmm))
        f.write(str(hmm.get_parameters()))
 def test_build(self):
     builder = Builder()
     builder.add_training_example(self._obs[0], self._states[0])
     builder.add_batch_training_examples(self._obs[1:], self._states[1:])
     for do_synthesize in [True, False]:
         for order in range(1, 5):
             hmm = builder.build(
                 highest_order=order,
                 k_smoothing=.01,
                 synthesize_states=do_synthesize
             )
             self._test_parameters(hmm.get_parameters(), order)
 def test_start_probs_parameters(self):
     # test for when include_pi = false (all entries should be 1)
     builder = Builder()
     builder.add_batch_training_examples(self._obs, self._states)
     for order in range(1, 3):
         hmm = builder.build(
             highest_order=order,
             k_smoothing=.01,
             synthesize_states=True,
             include_pi=False
         )
         params = hmm.get_parameters()
         pi = params["pi"]
         for i in range(order):
             [self.assertEqual(v, 1) for v in pi[i].values()]
 def test_set_states_before_build(self):
     builder = Builder()
     builder.add_batch_training_examples(self._obs, self._states)
     builder.set_all_obs(['normal', 'cold', 'dizzy'])
     builder.set_single_states(['fever', 'healthy', 'blah'])
     hmm = builder.build(
         highest_order=2,
         k_smoothing=.01,
         synthesize_states=False
     )
     hmm2 = builder.build(
         highest_order=2,
         k_smoothing=.01,
         synthesize_states=True
     )
     self._test_parameters(hmm.get_parameters(), 2)
     self.assertEqual(hmm.get_parameters(), hmm2.get_parameters())
    def test_build_uniform(self):
        builder = Builder()
        builder.set_all_obs(['normal', 'cold', 'dizzy'])
        builder.set_single_states(['healthy', 'fever'])
        uniform_hmm = builder.build_unsupervised(distribution="uniform")
        uniform_hmm_2 = builder.build_unsupervised(distribution="uniform")
        self.assertEqual(
            uniform_hmm.get_parameters(),
            uniform_hmm_2.get_parameters()
        )

        params = uniform_hmm.get_parameters()
        self.assertEqual(len(set(params["pi"][0].values())), 1)
        for row in params["A"]:
            self.assertEqual(len(set(row)), 1)
            self.assertAlmostEqual(sum(row), 1)
        for row in params["B"]:
            self.assertEqual(len(set(row)), 1)
            self.assertAlmostEqual(sum(row), 1)
 def test_build_synthesize(self):
     builder = Builder()
     builder.add_batch_training_examples(self._obs, self._states)
     hmm_synth = builder.build(
         highest_order=3,
         k_smoothing=.01,
         synthesize_states=True
     )
     hmm_no_synth = builder.build(
         highest_order=3,
         k_smoothing=.01,
         synthesize_states=False
     )
     params_synth = hmm_synth.get_parameters()
     params = hmm_no_synth.get_parameters()
     # there should be more possible starting states with params_synth
     self.assertGreater(len(params_synth["pi"][2]), len(params["pi"][2]))
     # there should be more possible state transitions with params_synth
     self.assertGreater(len(params_synth["A"]), len(params["A"]))
     self.assertEqual(len(params_synth["B"]), len(params["B"]))
    def test_build_random(self):
        builder = Builder()
        builder.set_all_obs(['normal', 'cold', 'dizzy'])
        builder.set_single_states(['healthy', 'fever'])
        random_hmm = builder.build_unsupervised(distribution="random")
        random_hmm_2 = builder.build_unsupervised(distribution="random")
        self.assertNotEqual( # ignore small chance they could be the same
            random_hmm.get_parameters(),
            random_hmm_2.get_parameters()
        )

        params = random_hmm.get_parameters()
        self.assertAlmostEqual(sum(params["pi"][0].values()), 1)
        self.assertGreater(len(params["A"]), 1)
        for row in params["A"]:
            self.assertGreater(len(row), 1)
            self.assertAlmostEqual(sum(row), 1)

        self.assertGreater(len(params["B"]), 1)
        for row in params["B"]:
            self.assertGreater(len(row), 1)
            self.assertAlmostEqual(sum(row), 1)