def testem(self): # complex DataSet with HMM sequences and scalar data dat = self.gen.sampleSet(100) # sampling hmm data seq1 = self.h1.hmm.sample(40, 10) seq2 = self.h2.hmm.sample(60, 10) seq1.merge(seq2) data = mixtureHMM.SequenceDataSet() data.fromGHMM(dat, [seq1]) data.internalInit(self.m) tA = [[0.5, 0.2, 0.3], [0.2, 0.3, 0.5], [0.1, 0.5, 0.4]] tB = [[0.2, 0.4, 0.1, 0.3], [0.5, 0.1, 0.2, 0.2], [0.4, 0.3, 0.15, 0.15]] tpi = [0.3, 0.3, 0.4] th1 = mixtureHMM.getHMM( mixtureHMM.ghmm.IntegerRange(0, 4), mixtureHMM.ghmm.DiscreteDistribution( mixtureHMM.ghmm.IntegerRange(0, 4)), tA, tB, tpi) tA2 = [[0.5, 0.4, 0.1], [0.3, 0.2, 0.5], [0.3, 0.2, 0.5]] tB2 = [[0.1, 0.1, 0.4, 0.4], [0.1, 0.1, 0.4, 0.4], [0.2, 0.1, 0.6, 0.1]] tpi2 = [0.3, 0.4, 0.3] th2 = mixtureHMM.getHMM( mixtureHMM.ghmm.IntegerRange(0, 4), mixtureHMM.ghmm.DiscreteDistribution( mixtureHMM.ghmm.IntegerRange(0, 4)), tA2, tB2, tpi2) tn1 = NormalDistribution(-1.5, 1.5) tn2 = NormalDistribution(9.0, 1.2) tmult1 = MultinomialDistribution(3, 4, [0.1, 0.1, 0.55, 0.25], alphabet=self.DIAG) tmult2 = MultinomialDistribution(3, 4, [0.4, 0.3, 0.1, 0.2], alphabet=self.DIAG) tc1 = ProductDistribution([tn1, tmult1, th1]) tc2 = ProductDistribution([tn2, tmult2, th2]) tmpi = [0.7, 0.3] tm = MixtureModel(2, tmpi, [tc1, tc2]) tm.EM(data, 80, 0.1, silent=1)
def testememptylist(self): # complex DataSet with HMM sequences only # sampling hmm data seq1 = self.h1.hmm.sample(40, 10) seq2 = self.h2.hmm.sample(60, 10) seq1.merge(seq2) data = mixtureHMM.SequenceDataSet() data.fromGHMM([], [seq1]) tA = [[0.5, 0.2, 0.3], [0.2, 0.3, 0.5], [0.1, 0.5, 0.4]] tB = [[0.2, 0.4, 0.1, 0.3], [0.5, 0.1, 0.2, 0.2], [0.4, 0.3, 0.15, 0.15]] tpi = [0.3, 0.3, 0.4] th1 = mixtureHMM.getHMM( mixtureHMM.ghmm.IntegerRange(0, 4), mixtureHMM.ghmm.DiscreteDistribution( mixtureHMM.ghmm.IntegerRange(0, 4)), tA, tB, tpi) tA2 = [[0.5, 0.4, 0.1], [0.3, 0.2, 0.5], [0.3, 0.2, 0.5]] tB2 = [[0.1, 0.1, 0.4, 0.4], [0.1, 0.1, 0.4, 0.4], [0.2, 0.1, 0.6, 0.1]] tpi2 = [0.3, 0.4, 0.3] th2 = mixtureHMM.getHMM( mixtureHMM.ghmm.IntegerRange(0, 4), mixtureHMM.ghmm.DiscreteDistribution( mixtureHMM.ghmm.IntegerRange(0, 4)), tA2, tB2, tpi2) c1 = ProductDistribution([th1]) c2 = ProductDistribution([th2]) mpi = [0.4, 0.6] hm = MixtureModel(2, mpi, [c1, c2]) data.internalInit(hm) hm.EM(data, 40, 0.1, silent=1)
p2.append(random.random()) p3.append(random.random()) p4.append(random.random()) g1 = lambda x: x / sum(p1) p1 = map(g1, p1) g2 = lambda x: x / sum(p2) p2 = map(g2, p2) g3 = lambda x: x / sum(p3) p3 = map(g3, p3) g4 = lambda x: x / sum(p4) p4 = map(g4, p4) mult = MultinomialDistribution(6, 25, p1, SNP) mult2 = MultinomialDistribution(7, 25, p2, SNP) phi = NormalDistribution(11.0, 4.0) phi2 = NormalDistribution(11.0, 6.0) pd1 = ProductDistribution([mult, mult2, phi, phi2]) mult3 = MultinomialDistribution(6, 25, p3, SNP) mult4 = MultinomialDistribution(7, 25, p4, SNP) phi3 = NormalDistribution(8.0, 5.0) phi4 = NormalDistribution(15.0, 5.0) pd2 = ProductDistribution([mult, mult2, phi, phi2]) m = MixtureModel(2, [0.5, 0.5], [pd1, pd2]) m.EM(d, 15, 0.05)
pdList.append(ProductDistribution(dList)) piList = [random(), random(), random()] g = lambda x: x / sum(piList) piList = map(g, piList) mix = MixtureModel(3, piList, pdList) dat = mix.sampleDataSet(1000) pdList2 = [] for j in range(3): dList2 = [] for i in range(10): par2 = [random(), random(), random(), random(), random(), random()] f = lambda x: x / sum(par2) par2 = map(f, par2) dList2.append(MultinomialDistribution(6, 6, par2)) pdList2.append(ProductDistribution(dList2)) piList2 = [random(), random(), random()] g = lambda x: x / sum(piList2) piList2 = map(g, piList2) mix2 = MixtureModel(3, piList2, pdList2) with Timer("time"): mix2.EM(dat, 40, 0.1)
tB2 = [[0.1, 0.1, 0.4, 0.4], [0.1, 0.1, 0.4, 0.4], [0.2, 0.1, 0.6, 0.1]] tpi2 = [0.3, 0.4, 0.3] th2 = mixtureHMM.getHMM( mixtureHMM.ghmm.IntegerRange(0, 4), mixtureHMM.ghmm.DiscreteDistribution(mixtureHMM.ghmm.IntegerRange(0, 4)), tA2, tB2, tpi2) tn1 = NormalDistribution(-1.5, 1.5) tn2 = NormalDistribution(9.0, 1.2) tmult1 = MultinomialDistribution(3, 4, [0.1, 0.1, 0.55, 0.25], alphabet=DIAG) tmult2 = MultinomialDistribution(3, 4, [0.4, 0.3, 0.1, 0.2], alphabet=DIAG) tc1 = ProductDistribution([tn1, tmult1, th1]) tc2 = ProductDistribution([tn2, tmult2, th2]) tmpi = [0.7, 0.3] tm = MixtureModel(2, tmpi, [tc1, tc2]) tm.EM(data, 80, 0.1, silent=0) ##for i,s in enumerate(seq1): ## print "\n",i,":",s ## print "h1:",h1.hmm.loglikelihoods(s) ## print "h2:",h2.hmm.loglikelihoods(s) # # ##print tm ##print tm.components[0].distList[2].hmm ##print tm.components[1].distList[2].hmm
random(), random(), random(), random(), random() ] g = lambda x: x / sum(piList2) piList2 = map(g, piList2) #print piList #print sum(piList) for i in range(10): par2 = [random(), random(), random()] f = lambda x: x / sum(par2) par2 = map(f, par2) # print par dList2.append(MultinomialDistribution(6, 3, par2)) mix2 = MixtureModel(10, piList2, dList2) mix2.EM(s, 50, 0.2) print "----------- True Model--------- " print mix print "--------------------------------\n\n" print "----------- Trained Model--------- " print mix2 print "--------------------------------"
dat = DataSet() dat.fromArray(seq3) print "vorher ------\n", m4 pred = m4.cluster(dat, nr_runs=5, nr_init=9, max_iter=30, delta=0.1, labels=None, entropy_cutoff=None) classes = m4.classify(dat) m4.shortInitEM(dat, 5, 5, 5, 0.1) m4.EM(seq3, 20, 0.1) print "####Finish\n", m4 dat.printClustering(2, pred) evaluate(pred, true) # ----------------------------- Example 4 ----------------------------- m5 = MixtureModel(1, [1.0], [NormalDistribution(3.0, 2.5)]) seq4 = m5.sample(1800) #print "var = ", variance(seq4) m6 = MixtureModel(1, [1.0], [NormalDistribution(-1.5, 2.5)])