Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. // Viterbi algorithm for finding hidden relationships
  2. function Viterbi(data) {
  3. var V = [{}];
  4. var path = {};
  5.  
  6. // Initialize base cases (t == 0)
  7. for(var i=0;i<data.states.length;i++) {
  8. var state = data.states[i];
  9. V[0][state] = data.start_probability[state] * data.emission_probability[state][data.observations[0]];
  10. path[state] = [state];
  11. }
  12.  
  13. // Run Viterbi for t > 0
  14. for(var t=1;t<data.observations.length;t++) {
  15. V.push({});
  16. var newpath = {};
  17.  
  18. for(var i=0;i<data.states.length;i++) {
  19. var state = data.states[i];
  20. var max = [0,null];
  21. for(var j=0;j<data.states.length;j++) {
  22. var state0 = data.states[j];
  23. // Calculate the probablity
  24. var calc = V[t-1][state0]
  25. * data.transition_probability[state0][state]
  26. * data.emission_probability[state][data.observations[t]];
  27. if(calc > max[0]) max = [calc,state0];
  28. }
  29. V[t][state] = max[0];
  30. newpath[state] = path[max[1]].concat(state);
  31. }
  32. path = newpath;
  33. }
  34.  
  35. var max = [0,null];
  36. for(var i=0;i<data.states.length;i++) {
  37. var state = data.states[i];
  38. var calc = V[data.observations.length-1][state];
  39. if(calc > max[0]) max = [calc,state];
  40. }
  41.  
  42. return [max[0], path[max[1]]];
  43. }
  44.  
  45. var result = Viterbi({
  46. states: [
  47. 'Rainy',
  48. 'Sunny'
  49. ],
  50. observations: [
  51. 'walk',
  52. 'shop',
  53. 'clean'
  54. ],
  55. start_probability: {
  56. 'Rainy': 0.6,
  57. 'Sunny': 0.4
  58. },
  59. transition_probability: {
  60. 'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
  61. 'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
  62. },
  63. emission_probability: {
  64. 'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
  65. 'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
  66. }
  67. });
  68. document.write(result[0]+'<br>');
  69. for(var i=0;i<result[1].length;i++)
  70. document.write((i==0?'':'->')+result[1][i]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement