def checkDistRuntime(tp = 0): times = [] xs = [] for d in np.logspace(-7,2,100): v = make_church_prime_ripl() timeStart = time.time() if tp == 0: v.assume("y", "(student_t %f)" % d) elif tp == 1: v.assume("y", "(uniform_continuous 0 %f)" % d) samples = pu.posterior_samples(v, "y", no_samples=100, no_burns=0, int_mh=1, silent=True) vals = map(lambda x:x[1], samples) times.append(time.time() - timeStart) xs.append(d) print d, np.mean(vals), times[-1] print xs print times plt.plot(xs,times, '-x') if tp == 0: plt.xlabel("Degrees of freedom") plt.ylabel("Seconds") plt.title("Speed of generating 100 unconditioned student_t samples") plt.ylim([0,max(max(times),1)]) elif tp == 1: plt.xlabel("Upper limit of interval (x)") plt.ylabel("Seconds") plt.title("Speed of generating 100 unconditioned (uniform_continuous 0 x) samples") plt.xscale("log") plt.ylim([0,max(max(times),1)]) plt.show()
def testCont(ys, sample, burn, lag): pals = [0,0.5,1,2,5,10,20] with open("contConvRT",'w') as f: for i1 in range(len(pals)): for i2 in range(len(pals))[i1:]: for i3 in range(len(pals))[i2:]: for i4 in range(len(pals))[i3:]: p1 = pals[i1] p2 = pals[i2] p3 = pals[i3] p4 = pals[i4] v = make_church_prime_ripl() timeStart = time.time() rest = 100.0 - (p1 + p2 + p3 + p4) if p1 > 0: v.assume("d1", "(uniform_continuous 0 " + str(p1) + ")") else: v.assume("d1", "0") if p2 > 0: v.assume("d2", "(uniform_continuous 0 " + str(p2) + ")") else: v.assume("d2", "0") if p3 > 0: v.assume("d3", "(uniform_continuous 0 " + str(p3) + ")") else: v.assume("d3", "0") if p4 > 0: v.assume("d4", "(uniform_continuous 0 " + str(p4) + ")") else: v.assume("d4", "0") v.assume("r", "(uniform_continuous 2 " + str(rest) + ")") v.assume("d", "(+ d1 d2 d3 d4 r)")#(uniform_continuous 0 5) (uniform_continuous 0 1))") v.assume("y", "(lambda () (student_t d))") [v.observe("(y)", str(ys[i])) for i in range(len(ys))] samples = pu.posterior_samples(v, "d", no_samples=sample, no_burns=burn, int_mh=lag) vals = map(lambda x:x[1], samples) print rest, p1, p2, p3, p4, np.mean(vals), np.var(vals), time.time() - timeStart f.write("==== " + str((rest,p1,p2,p3,p4,time.time() - timeStart)) + "\n" + str(vals)) f.flush()
def repeatCont(ys, sample, burn, lag): with open("contRepeats10F",'w') as f: means = [] times = [] for j in range(10): v = make_church_prime_ripl() timeStart = time.time() v.assume("d1", "(uniform_continuous 0 99.9978)") v.assume("d2", "(uniform_continuous 0 0.001)") v.assume("d3", "(uniform_continuous 0 0.001)") v.assume("d4", "(uniform_continuous 0 0.0001)") v.assume("d5", "(uniform_continuous 0 0.0001)") v.assume("d", "(+ d1 d2 d3 d4 d5)") v.assume("y", "(lambda () (student_t d))") [v.observe("(y)", str(ys[i])) for i in range(len(ys))] samples = pu.posterior_samples(v, "d", no_samples=sample, no_burns=burn, int_mh=lag) vals = map(lambda x:x[1], samples) means.append(np.mean(vals)) times.append(time.time() - timeStart) print j, means[-1], times[-1] f.write(str((j, means[-1], times[-1])) + "\n") f.flush() f.write(str(("Total: ", np.mean(means), np.mean(times))))
def runModel(v, ys, mType, sample, burn, lag, fnAdd = "", timeTest = False, silentSamp = False): timeStart = time.time() if mType == "cont": v.assume("d", "(uniform_continuous 2 100)") v.assume("y", "(lambda () (student_t d))") elif mType == "cont5var": v.assume("d1", "(uniform_continuous 2 100)") v.assume("d2", "(uniform_continuous 0 0.001)") v.assume("d3", "(uniform_continuous 0 0.001)") v.assume("d4", "(uniform_continuous 0 0.0001)") v.assume("d5", "(uniform_continuous 0 0.0001)") v.assume("d", "(+ d1 d2 d3 d4 d5)") #(uniform_continuous 0 5) (uniform_continuous 0 1))") v.assume("y", "(lambda () (student_t d))") elif mType == "contBin": v.assume("f1", "(* 0.5 (categorical 0.5 0.5))") v.assume("r", "(uniform_continuous 0 0.5)") v.assume("d", "(+ f1 r)") v.assume("y", "(lambda () (student_t d))") elif mType == "contBin3": v.assume("f0", "(* 0.5 (uniform_discrete 0 2))") v.assume("f1", "(* 0.25 (uniform_discrete 0 2))") v.assume("f2", "(* 0.125 (uniform_discrete 0 2))") v.assume("r", "(uniform_continuous 0 0.125)") v.assume("d", "(+ 2 (* 98 (+ f0 f1 f2 r)))") v.assume("y", "(lambda () (student_t d))") elif mType == "contBin7": v.assume("f0", "(* 0.5 (uniform_discrete 0 2))") v.assume("f1", "(* 0.25 (uniform_discrete 0 2))") v.assume("f2", "(* 0.125 (uniform_discrete 0 2))") v.assume("f3", "(* 0.0625 (uniform_discrete 0 2))") v.assume("f4", "(* 0.03125 (uniform_discrete 0 2))") v.assume("f5", "(* 0.015625 (uniform_discrete 0 2))") v.assume("f6", "(* 0.0078125 (uniform_discrete 0 2))") v.assume("r", "(uniform_continuous 0 0.0078125)") v.assume("d", "(+ 2 (* 98 (+ f0 f1 f2 f3 f4 f5 f6 r)))") v.assume("y", "(lambda () (student_t d))") elif mType == "contMix": v.assume("d1", "(uniform_continuous 2 97)") v.assume("d2", "(uniform_continuous 0 1)") v.assume("d3", "(uniform_continuous 0 2)") v.assume("d", "(+ d1 d2 d3)") #(uniform_continuous 0 5) (uniform_continuous 0 1))") v.assume("y", "(lambda () (student_t d))") elif mType == "flip": v.assume("d0", "(uniform_continuous 0 1)") v.assume("f0", "(uniform_discrete 0 2)") v.assume("f1", "(* 2 (uniform_discrete 0 2))") v.assume("f2", "(* 4 (uniform_discrete 0 2))") v.assume("f3", "(* 8 (uniform_discrete 0 2))") v.assume("f4", "(* 16 (uniform_discrete 0 2))") v.assume("f5", "(* 32 (uniform_discrete 0 2))") v.assume("f6", "(* 64 (uniform_discrete 0 2))") v.assume("d", "(+ (+ (+ d0 f0) (+ f1 f2)) (+ (+ f3 f4) (+ f5 f6)))") #(uniform_continuous 0 5) (uniform_continuous 0 1))") v.assume("y", "(lambda () (student_t d))") elif mType == "disc1": v.assume("d", "(uniform_discrete 2 50)") v.assume("y", "(lambda () (student_t d))") elif mType == "disc2": v.assume("d", "(/ (uniform_discrete 20 60) 10)") v.assume("y", "(lambda () (student_t d))") elif mType == "disc21": v.assume("d", "(uniform_discrete 20 60)") v.assume("y", "(lambda () (student_t (/ d 10)))") else: raise Exception("Unknown model type: " + mType) [v.observe("(y)", str(ys[i])) for i in range(len(ys))] samples = pu.posterior_samples(v, "d", no_samples=sample, no_burns=burn, int_mh=lag, silent = silentSamp) if timeTest: return time.time() - timeStart print '\n'.join([str(samples[i][1]) for i in range(len(samples)) if i%10==0]) #v.infer(11000000) vals = map(lambda x:x[1], samples) print "Sample mean: ", np.mean(vals), " Sample Stdev: ", np.std(vals) pu.save_samples(samples, os.getcwd(), fnAdd+mType)
def genTdf(v): v.assume("y", "(student_t 4)") samples = pu.posterior_samples(v, "y", no_samples=1000, no_burns=0, int_mh=1)