modelmgmt.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:bayes-qnet 作者: casutton 项目源码 文件源码
def _split_state (a_old, o_old, state, q0l, q1l):
# use least-squares to find new parameters
# add new state to end
    ns = a_old.shape[0]
    no = o_old.shape[1]
    A = numpy.zeros((ns+1,ns+1))
    O = numpy.zeros((ns+1,no))
    A[0:ns,0:ns] = a_old
    O[0:ns,:] = o_old
    # fill in p ( * | snew2)
    A[ns,:] = A[state,:]
    # fill in p (q | snew2)
    O[ns,:] = O[state,:]  # order of these three lines matters
    O[ns,q0l] = 0
    w2 = numpy.sum (O[ns,:])
    O[ns,:] = O[ns,:] / w2
    # fill in p (q | snew1)
    O[state,q1l] = 0
    w1 = numpy.sum(O[state,:])
    O[state,:] = O[state,:] / w1
    # finally, fill in p( snew1 | *)  p ( snew2 | *)
    A[:,ns] = A[:,state]
    A[:,state] = w1 / (w1+w2) * A[:,state]
    A[:,ns] = w2 / (w1++w2) * A[:,ns]
    # done
    return A,O,ns

    # tricky part is the incoming state reallocate by solving linear system
    #  (we'll call the coefficients M)
#     M = numpy.zeros(( ns + no*ns,  2*(ns+1) ))
#     b = numpy.zeros( M.shape[0] )
#     ri = 0
#     def idx (s0, s1): return s0 if s1 == state else ns + s0
#     for si in range(ns):
#         M[ri,idx(si,state)] = M[ri,idx(si,ns)] = 1
#         b[ri] = a_old[si,state]
#         ri += 1
#     # q1 obs constraint
#     print M.shape
#     for si in range(ns):
#         for qi in range(no):
#             print "O[state,qi]", O[state,qi]
#             M[ri,idx(si,state)] = O[state,qi]
#             M[ri,idx(si,ns)] = O[si,qi]
#             print ri, "o_old", state, qi, o_old[state,qi]
#             print ri, b[ri]
#             b[ri] = o_old[state,qi]
#             ri += 1
#     # solve        
#     x,resids,rank,s = linalg.lstsq(M,b)
#     print "X", x
#     print "RESIDS", resids
#     A[:,state] = x[0:ns+1]
#     A[:,state] = A[:,state] / numpy.sum(A[:,state])
#     A[:,ns] = x[ns+1:]
#     A[:,ns] = A[:,ns]  / numpy.sum(A[:,ns])
#     # finally
#     return A,O,ns
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号