Ejemplo n.º 1
0
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)
Ejemplo n.º 3
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]))