def test_baum_welch_training_standard(self): """Standard Training with known states.""" known_training_seq = Trainer.TrainingSequence(self.rolls, self.states) standard_mm = self.mm_builder.get_markov_model() trainer = Trainer.KnownStateTrainer(standard_mm) trained_mm = trainer.train([known_training_seq]) if VERBOSE: print(trained_mm.transition_prob) print(trained_mm.emission_prob) test_rolls, test_states = generate_rolls(300) predicted_states, prob = trained_mm.viterbi(test_rolls, DiceTypeAlphabet()) if VERBOSE: print("Prediction probability: %f" % prob) Utilities.pretty_print_prediction(test_rolls, test_states, predicted_states)
builder.set_emission_score('O', 'A', (1 / 3)) builder.set_emission_score('O', 'T', (2 / 3)) #building hmm hmm = builder.get_markov_model() #list sequence & state utk training tseq = [Seq('ACSA', DNA()), Seq('AST', DNA()), Seq('ACCST', DNA())] tstate = [ MutableSeq('MJNO', State()), MutableSeq('MNO', State()), MutableSeq('MJJNO', State()) ] #training dengan menggunakan sequence ACSA, AST, ACCST pada tstate dan tseq trainer = Trainer.KnownStateTrainer(hmm) #hmm dilatih satupersatu for i in range(len(tseq)): trainseq = Trainer.TrainingSequence(tseq[i], tstate[i]) trainhmm = trainer.train([trainseq]) #Query yang akan dicocokan beserta dengan perhitungan state awalnya seq = Seq('ACCCSA', DNA()) state = MutableSeq('MJJJNO', State()) #algoritma viterbi akan mencari state yang terbaik untuk sequence predicted_states, prob = trainhmm.viterbi(seq, State()) #mengeluarkan hasil probabilitas dari sequence, emission, statenya, dan predicted statenya print("Prediction probability: %f" % prob) Utilities.pretty_print_prediction(seq, state, predicted_states)
""" if VERBOSE: print("ll change: %f" % log_likelihood_change) if log_likelihood_change < 0.01: return 1 elif num_iterations >= 10: return 1 else: return 0 # -- Standard Training with known states print("Training with the Standard Trainer...") known_training_seq = Trainer.TrainingSequence(rolls, states) trainer = Trainer.KnownStateTrainer(standard_mm) trained_mm = trainer.train([known_training_seq]) if VERBOSE: print(trained_mm.transition_prob) print(trained_mm.emission_prob) test_rolls, test_states = generate_rolls(300) predicted_states, prob = trained_mm.viterbi(test_rolls, DiceTypeAlphabet()) if VERBOSE: print("Prediction probability: %f" % prob) Utilities.pretty_print_prediction(test_rolls, test_states, predicted_states) # -- Baum-Welch training without known state sequences print("Training with Baum-Welch...")
markovModel = markovBuilder.get_markov_model() #3 sequence yang akan dialign seq1 = Seq('ATGA', arrayDNA()) seq2 = Seq('A CCA', arrayDNA()) seq3 = Seq('ACAST', arrayDNA()) #state untuk tiap sequence seq1State = MutableSeq('MNOP', arrayState()) seq2State = MutableSeq('MDIOP', arrayState()) seq3State = MutableSeq('MNIOP', arrayState()) seq = [seq1, seq2, seq3] states = [seq1State, seq2State, seq3State] #training Hidden Markov Model dengan sequence di atas trainer = Trainer.KnownStateTrainer(markovModel) for i in range(len(seq)): trainingseq = Trainer.TrainingSequence(seq[i], states[i]) trainedhmm = trainer.train([trainingseq]) #contoh query yang lain testSeq = Seq('ATSA', arrayDNA()) testState = MutableSeq('MNOP', arrayState()) #mencari state terbaik untuk sequence dengan Viterbi Algorithm predictedstates, prob = trainedhmm.viterbi(testSeq, arrayState()) #mengeluarkan hasil probabilitas dari sequence, emission, statenya, dan predicted statenya print("Probabilitas Prediksi: %f" % prob) Utilities.pretty_print_prediction(testSeq, testState, predictedstates)