Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. # Viterbi algorithm ---------------------------------------------------------------
  2.  
  3.  
  4. # initializations ---------------------------------------------------------
  5.  
  6.  
  7. States = c("1","2","3","4")
  8. Letters = c("Giraffes","Live","In","The","Savannah")
  9. iter = 0
  10. transitionMatrix = matrix(c(.22,0,.41,.32,.38,.21,.09,0,.15,.42,.3,.29,.25,.37,.2,.39),4)
  11. #emissionProbabilities=matrix(c(.13,.27,.42,.11,.09,.31,.09,.24,.06,.3,.15,.21,.3,.12,.22,.08,.13,.16,.47,.16),5)
  12. emissionProbabilities=matrix(c(.13,.31,.15,.08,.27,.09,.21,.13,.42,.24,.3,.16,.11,.06,.12,.47,.09,.3,.22,.16),4)
  13. sequence = c("Giraffes","Live","In","The","Savannah")
  14. initialProbabilities = rep(1/2,4)
  15. initialProbabilities[1]=0.23
  16. initialProbabilities[2]=0.31
  17. initialProbabilities[3]=0.27
  18. initialProbabilities[4]=0.19
  19.  
  20. names(initialProbabilities) = States
  21. dimnames(transitionMatrix)= list(from=States,to=States)
  22. dimnames(emissionProbabilities)= list(states=States,symbols=Letters)
  23.  
  24.  
  25. transitionMatrix[is.na(transitionMatrix)] = 0
  26. emissionProbabilities[is.na(emissionProbabilities)] = 0
  27. diff = c()
  28. #################################################################
  29. transitionMatrix[is.na(transitionMatrix)] = 0
  30. emissionProbabilities[is.na(emissionProbabilities)] = 0
  31. nSequence=length(sequence)
  32. nStates=length(States)
  33. v= array(NA,c(nStates,nSequence))
  34. dimnames(v)= list(states=States,index=1:nSequence)
  35. # Init
  36. for(state in States)
  37. {
  38. v[state,1] =initialProbabilities[state] * emissionProbabilities[state,sequence[1]]
  39. }
  40. # Iteration
  41. for(k in 2:nSequence)
  42. {
  43. for(state in States)
  44. {
  45. maxi = NULL
  46. for(previousState in States)
  47. {
  48. temp = v[previousState,k-1] * transitionMatrix[previousState,state] * emissionProbabilities[state,sequence[k]]
  49. maxi = max(maxi, temp)
  50. }
  51. v[state,k] = maxi
  52. }
  53. }
  54. # Traceback
  55. finalVitPath = rep(NA,nSequence)
  56. for(state in States)
  57. {
  58. if(max(v[,nSequence])==v[state,nSequence])
  59. {
  60. finalVitPath[nSequence] = state
  61. break
  62. }
  63. }
  64. for(k in (nSequence-1):1)
  65. {
  66. for(state in States)
  67. {
  68. if(max(v[,k]*transitionMatrix[,finalVitPath[k+1]])==v[state,k]*transitionMatrix[state,finalVitPath[k+1]])
  69. {
  70. finalVitPath[k] = state
  71. break
  72. }
  73. }
  74. }
  75. ######################################################################
  76.  
  77. # final answer ------------------------------------------------------------
  78.  
  79. print(finalVitPath)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement