On 2014-05-10 20:27, subhabangal...@gmail.com wrote:
Dear Room,

I was trying to go through a code given in 
http://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm[ Forward 
Backward is an algorithm of Machine Learning-I am not talking on that
I am just trying to figure out a query on its Python coding.]

I came across the following codes.

states = ('Healthy', 'Fever')
end_state = 'E'
observations = ('normal', 'cold', 'dizzy')
start_probability = {'Healthy': 0.6, 'Fever': 0.4}
transition_probability = {
    'Healthy' : {'Healthy': 0.69, 'Fever': 0.3, 'E': 0.01},
    'Fever' : {'Healthy': 0.4, 'Fever': 0.59, 'E': 0.01},
    }
emission_probability = {
    'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},
    'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},
    }

def fwd_bkw(x, states, a_0, a, e, end_st):
     L = len(x)
     fwd = []
     f_prev = {} #THE PROBLEM
     # forward part of the algorithm
     for i, x_i in enumerate(x):
         f_curr = {}
         for st in states:
             if i == 0:
                 # base case for the forward part
                 prev_f_sum = a_0[st]
             else:
                 prev_f_sum = sum(f_prev[k]*a[k][st] for k in states) ##

             f_curr[st] = e[st][x_i] * prev_f_sum

         fwd.append(f_curr)
         f_prev = f_curr

     p_fwd = sum(f_curr[k]*a[k][end_st] for k in states)

As this value was being called in prev_f_sum = sum(f_prev[k]*a[k][st] for k in 
states marked ##
I wanted to know what values it is generating.
So, I had made the following experiment, after
for i, x_i in enumerate(x):
I had put print f_prev
but I am not getting how f_prev is getting the values.

Here,
x=observations,
states= states,
a_0=start_probability,
a= transition_probability,
e=emission_probability,
end_st= end_state

Am I missing any minor aspect?
Code is running fine.

If any one of the esteemed members may kindly guide me.

The values calculated in the inner loop are being put into the dict 'f_curr'
and then, when that loop has completed, 'f_prev' is being bound to that
dict.

'f_curr' is bound to a new dict just before the inner loop, ready for
the new values.

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to