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
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)