scale = 1.5 * max(map(lambda i: gt_weight[i]*gt[i].prob(gt[i].getMean()), xrange(len(gt)))) # Fill in the model... model = DPGMM(dims) for point in samples: model.add(point) model.setPrior() # Iterate over the number of sticks, increasing till it stops getting better... prev = None while True: print 'Stick count = %i'%model.getStickCap() p = ProgBar() it = model.solve() del p print 'Updated fitting in %i iterations'%it # Now plot the estimated distribution against the actual distribution... img = numpy.ones((height,width,3)) draw = model.sampleMixture() for px in xrange(width): x = float(px)/float(width) * (high-low) + low y_gt = 0.0 for ii in xrange(len(gt)): y_gt += gt_weight[ii] * gt[ii].prob([x]) y_gu = model.prob([x]) y_gd = 0.0
scale = 1.2 * max( map(lambda i: gt_weight[i] * gt[i].prob(gt[i].getMean()), xrange(len(gt)))) # Iterate, slowlly building up the number of samples used and outputting the fit for each... out = [8, 16, 32, 64, 128, 256, 512, 1024, 2048] model = DPGMM(dims, 8) for i, point in enumerate(samples): model.add(point) if (i + 1) in out: print '%i datapoints:' % (i + 1) # First fit the model... model.setPrior() p = ProgBar() it = model.solve() del p print 'Updated fitting in %i iterations' % it # Some information... #print 'a:' #print model.alpha #print 'v:' #print model.v #print 'stick breaking weights:' #print model.v[:,0] / model.v.sum(axis=1) #print 'stick weights:' #print model.intMixture()[0] #print 'z sums:' #print model.z.sum(axis=0)
dims=2 numpy.random.seed(1); gt = Gaussian(dims) gt.setMean([1.0,0.0]) gt.setCovariance([[1.0,0.8],[0.8,1.0]]) sample_count = 30000 sample=[] for _ in xrange(sample_count): sample.append(gt.sample()) f=open('data.txt','w') for x in sample: f.write('%lf,%lf\n'%(x[0],x[1])) f.close() model = DPGMM(dims, 1) for i,data in enumerate(sample): model.add(data) start = time.time() model.setPrior() elapsed_time = time.time() - start num=model.solve() print elapsed_time print num print "%f"%(model.prob([2.0,1.0])) #for i in range(10): # x=i*0.4-2.0 #print "%f,%f"%(x,model.prob([x]))