def CheckViterbiVsSoft(jobpath, taskid):
  taskpath = PU.MakePath(os.path.join(jobpath, str(taskid)))
  hmodel = bnpy.load_model(taskpath)

  LPsoft = hmodel.calc_local_params(Data, limitMemoryLP=1)
  SSsoft = hmodel.get_global_suff_stats(Data, LPsoft)

  #zHatBySeq = AlignModelAndCalcDistance(Data, hmodel)
  from bnpy.allocmodel.hmm.HMMUtil import runViterbiAlg
  initPi = hmodel.allocModel.get_init_prob_vector()
  transPi = hmodel.allocModel.get_trans_prob_matrix()
  LP = hmodel.obsModel.calc_local_params(Data)
  Lik = LP['E_log_soft_ev']
  # Loop over each sequence in the collection
  zHatBySeq = list()
  for n in range(Data.nDoc):
    start = Data.doc_range[n]
    stop = Data.doc_range[n+1]
    zHat = runViterbiAlg(Lik[start:stop], initPi, transPi)
    zHatBySeq.append(zHat)
  zHatFlat = StateSeqUtil.convertStateSeq_list2flat(zHatBySeq, Data)
  LP = dict(Z=zHatFlat)
  LP = bnpy.init.FromTruth.convertLPFromHardToSoft(LP, Data, 
                                                   startIDsAt0=True,
                                                   Kmax=SSsoft.K)
  LP = hmodel.allocModel.initLPFromResp(Data, LP)
  SShard = hmodel.get_global_suff_stats(Data, LP)
  return SShard, SSsoft, LPsoft
Example #2
0
def loadModelWithLPSSandLscore(Data, path, label=''):
    M = bnpy.load_model(os.path.expandvars(path))
    LP = M.calc_local_params(Data)
    SS = M.get_global_suff_stats(Data, LP, doPrecompEntropy=1)
    M.update_global_params(SS)
    Lscore = M.calc_evidence(SS=SS)
    print "%15s K=%d  L=%.5f Ntotal=%.2f" % (label, SS.K, Lscore, SS.N.sum())
    return M, LP, SS, Lscore
def RunManualIntervention(jobpath, taskid, 
                          zBySeq=None, Kmax=None):
  taskpath = PU.MakePath(os.path.join(jobpath, str(taskid)))
  hmodel = bnpy.load_model(taskpath)
  print '------------ FROM CURRENT'
  RunForwardAndPrint(Data, hmodel.copy(), LP=None)
 
  Zflat = bnpy.util.StateSeqUtil.convertStateSeq_list2flat(zBySeq, Data)
  LP = dict(Z=Zflat)
  LP = bnpy.init.FromTruth.convertLPFromHardToSoft(LP, Data, 
                                                   startIDsAt0=True,
                                                   Kmax=Kmax)  
  LP = hmodel.allocModel.initLPFromResp(Data, LP)
  print '------------ FROM NEW'
  bestModel = RunForwardAndPrint(Data, hmodel.copy(), LP)

  return AlignModelAndCalcDistance(Data, bestModel)