def main(): toParse = sys.stdin.read() HMMstructures = BaulmWelch() sequence, transitionDict, emissionDict, availableStates = HMMstructures.parseInput( toParse) forwardGraph = HMMstructures.makeGraph(sequence, availableStates, transitionDict) reversedGraph = HMMstructures.reverseGraph(availableStates, forwardGraph) dagProb = DirectedAcyclicGraph() forwardWeights, forwardSum = dagProb.longestPath(1, len(sequence), 1, sequence, forwardGraph, emissionDict) backWeights, backSum = dagProb.longestPath( len(sequence) - 1, 0, -1, sequence, reversedGraph, emissionDict) stateProbabilities = HMMstructures.calcEachNode(forwardSum, forwardWeights, backWeights, sequence, availableStates) for prob in stateProbabilities: print(*prob, sep="\t")
def main(): toParse = sys.stdin.read() HMMstructures = HMM() sequence, transitionDict, emissionDict, availableStates = HMMstructures.parseInput( toParse) sys.stdin = open('/dev/tty') forwardGraph = HMMstructures.makeGraph(sequence, availableStates, transitionDict) reversedGraph = HMMstructures.reverseGraph(availableStates, forwardGraph) print(forwardGraph) print('*************') print(reversedGraph) dagProb = DirectedAcyclicGraph() forwardWeights, forwardSum = dagProb.longestPath(1, len(sequence), 1, sequence, forwardGraph, emissionDict) # print(forwardWeights) print('forward Done') print(forwardSum) backWeights, backSum = dagProb.longestPath( len(sequence) - 1, 0, -1, sequence, reversedGraph, emissionDict)
def main(): toParse = sys.stdin.read() HMMstructures = HMM() sequence, transitionDict, emissionDict, availableStates = HMMstructures.parseInput( toParse) dagGraph = HMMstructures.makeGraph(sequence, availableStates, transitionDict) dagProb = DirectedAcyclicGraph() getViterbi = dagProb.longestPath(sequence, dagGraph, transitionDict, emissionDict)
def main(): toParse = sys.stdin.read() HMMstructures = ForwardBackward() sequence, transitionDict, emissionDict, availableStates = HMMstructures.parseInput( toParse) dagProb = DirectedAcyclicGraph() forwardWeights, forwardSum = dagProb.longestPath(1, len(sequence), 1, sequence, emissionDict) backWeights, backSum = dagProb.longestPath( len(sequence) - 1, 0, -1, sequence, reversedGraph, emissionDict) accurateProbs, printProbs = HMMstructures.calcEachNode( forwardSum, forwardWeights, backWeights, sequence, availableStates) for prob in printProbs: print(*prob, sep="\t")
def runBaulmWelch(iterations, sequence, alphabet, transitionDict, emissionDict, availableStates): """Runs Baulm Welch parameter learning algorithm for given iterations and returns the final transition/emission parameters for the emitted sequence""" dagProb = DirectedAcyclicGraph() baulmWelch = BaulmWelch() forwardBackward = ForwardBackward() for i in range(int(iterations)): #run forward/backward algorithm on parameters accurateProbs, forward, forwardSum, backward = forwardBackward.getForwardBackward(sequence, transitionDict, emissionDict, availableStates, dagProb) #build pi* and pi** piStar, emisSums = baulmWelch.getPiStar(emissionDict, sequence, alphabet, availableStates) piStarStar, rowState, transitions = baulmWelch.getPiStarStar(sequence, availableStates, forward, backward, forwardSum, transitionDict, emissionDict) #rebuild normalized emission and transition dictionaries emissionDict = baulmWelch.emisMatrixtoDict(availableStates, alphabet, piStar, emisSums) transitionDict = baulmWelch.transMatrixtoDict(availableStates, piStarStar, rowState, transitions) return emissionDict, transitionDict