Finish code in Mathematica: The representations of HMMs is also the same. Here's what a call to readHMM[] would look like: hmmObject = readHMMFile["Test/humanMalaria.hmm"]= hmmObject$4958, hmmObject["states"]={"M", "H"} hmmObject["initialStateProbs"]={0.5, 0.5} hmmObject["transitionMatrix"]={{0.5, 0.5}, {0.5, 0.5}} hmmObject["alphabet"]={"A", "C", "G", "T"} hmmObject["emissionMatrix"]={{0.3, 0.25}, {0.2, 0.25}, {0.2, 0.25}, {0.3, 0.25}} observationSeq_ is like: {1, 4, 3, 1, 4, 4, 4, 3, 3, 2, 3, 2, 2, 3, 2} You will have two: buildForwardMatrix and buildBackwardMatrix. You will then combine them inside posteriorProbabilities. posteriorDecode calls posteriorProbabilities and uses the result to find the posterior path and output the corresponding state names. Finish the following four functions in Mathematica: buildForwardMatrix[observationSeq_, hmm_] := Module[{numberOfObservations, numberOfStates, forwardMatrix, observationIndex}, (* Put your code for bulding the forward matrix here. To give you an idea of what to expect, my code is 13 lines. But use as many lines as you need to make your code clear and readable. *) (* Return the Viterbi matrix. *) forwardMatrix] buildBackwardMatrix[observationSeq_, hmm_] :=Module[{numberOfObservations, numberOfStates, backwardMatrix, observationIndex}, (* Put your code for bulding the Viterbi matrix here. To give you an idea of what to expect, my code is 13 lines. But use as many lines as you need to make your code clear and readable. *) (* Return the Viterbi matrix. *) backwardMatrix]   (* posteriorDecode should return the state names for the sequence of most likely state.*) posteriorDecode[observationSeq_, hmm_] := posteriorProbabilities[observationSeq_, hmm_] := Because the posterior decoding only cares about the relative probabilities of the states at each time, you can multiple all the forward probabilities for a given observation or all the backward probabilities or both by arbitrary positive constants without changing the path. Thus, you should normalize each column of the forward and backward matrices as you build them. You should also normalize the product of the two, so that at the end of the calculation you have the posterior probabilities the states for each observation. You can then copy buildForwardMatrix as the basis for buildBackwardMatrix. Here some substantive changes are required, but the overall structure is the same. Differences include the initialization of the row for the last observation, the fact that you count backwards from the end of the matrix, and the actual calculation of the entries at each time point.

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter18: Stacks And Queues
Section: Chapter Questions
Problem 16PE: The implementation of a queue in an array, as given in this chapter, uses the variable count to...
icon
Related questions
Question

Finish code in Mathematica:

The representations of HMMs is also the same.

Here's what a call to readHMM[] would look like:

hmmObject = readHMMFile["Test/humanMalaria.hmm"]= hmmObject$4958,

hmmObject["states"]={"M", "H"}

hmmObject["initialStateProbs"]={0.5, 0.5}

hmmObject["transitionMatrix"]={{0.5, 0.5}, {0.5, 0.5}}

hmmObject["alphabet"]={"A", "C", "G", "T"}

hmmObject["emissionMatrix"]={{0.3, 0.25}, {0.2, 0.25}, {0.2, 0.25}, {0.3, 0.25}}

observationSeq_ is like: {1, 4, 3, 1, 4, 4, 4, 3, 3, 2, 3, 2, 2, 3, 2}

  1. You will have two: buildForwardMatrix and buildBackwardMatrix. You will then combine them inside posteriorProbabilitiesposteriorDecode calls posteriorProbabilities and uses the result to find the posterior path and output the corresponding state names.

Finish the following four functions in Mathematica:

buildForwardMatrix[observationSeq_, hmm_] := Module[{numberOfObservations, numberOfStates, forwardMatrix, observationIndex},

(* Put your code for bulding the forward matrix here. To give you an idea of what to expect,

my code is 13 lines. But use as many lines as you need to make your code clear and readable. *)

(* Return the Viterbi matrix. *)

forwardMatrix]

buildBackwardMatrix[observationSeq_, hmm_] :=Module[{numberOfObservations, numberOfStates, backwardMatrix, observationIndex},

(* Put your code for bulding the Viterbi matrix here. To give you an idea of what to expect,

my code is 13 lines. But use as many lines as you need to make your code clear and readable. *)

(* Return the Viterbi matrix. *)

backwardMatrix]

 

(* posteriorDecode should return the state names for the sequence of most likely state.*)

posteriorDecode[observationSeq_, hmm_] :=

posteriorProbabilities[observationSeq_, hmm_] :=

Because the posterior decoding only cares about the relative probabilities of the states at each time, you can multiple all the forward probabilities for a given observation or all the backward probabilities or both by arbitrary positive constants without changing the path. Thus, you should normalize each column of the forward and backward matrices as you build them. You should also normalize the product of the two, so that at the end of the calculation you have the posterior probabilities the states for each observation.

You can then copy buildForwardMatrix as the basis for buildBackwardMatrix. Here some substantive changes are required, but the overall structure is the same. Differences include the initialization of the row for the last observation, the fact that you count backwards from the end of the matrix, and the actual calculation of the entries at each time point.

Expert Solution
steps

Step by step

Solved in 3 steps

Blurred answer
Knowledge Booster
Developing computer interface
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning