def scoring(fname, n, test): # load test data a_test, age_err, age_errp, a_errm, p_test, p_err, bv_test, bv_err, g, g_err, \ g_errp, g_errm, flag = load_dat(fname, test, cv=True) # load parameters from training data data = np.genfromtxt('/Users/angusr/Python/noisy-plane/parameters%s%s.txt'%(n,fname)).T pars = data[0][:3] # calculate score p_pred = period_model(pars, a_test, bv_test, .45) l = np.isfinite(p_pred) n = len(p_pred[l]) # root mean squared error return np.sqrt((np.sum((p_test[l] - p_pred[l])**2))/n)
pars[:3] = data[0][:3] pars[3] = 0.45 print age, log_age_model(pars, np.log10(p[i]), bv[i]) if __name__ == "__main__": loo() raw_input('enter') trains = ['CF45', 'HF45', 'PF45', 'PF5'] tests = ['AHP', 'ACP', 'ACH', 'ACH'] RMS = [] for i in range(len(tests)): # load test data a_test, age_err, age_errp, a_errm, p_test, p_err, bv_test, bv_err, g, g_err, \ g_errp, g_errm, flag = load_dat(tests[i], False, False) print len(p_test) # load parameters from training data data = np.genfromtxt('/Users/angusr/Python/noisy-plane/parameters%s.txt'%trains[i]).T pars = data[0][:3] # calculate score p_pred = period_model(pars, a_test, bv_test, .45) l = np.isfinite(p_pred) n = len(p_pred[l]) # root mean squared error RMS.append(np.sqrt((np.sum(((p_test[l] - p_pred[l])**2)))/n))
def MCMC(fname, n, c, train, cv, sampling): # load MAP values try: params = np.genfromtxt('parameters%s.txt'%fname).T par_true = params[0] print 'initialising with MAP values' print par_true except: # par_true = [0.7725, 0.5189, .601, 5., 10., \ # Barnes par_true = [0.6, 0.5189, .601, 5., 10., \ 8., 30., 9., 5., .67] # better initialisation print par_true # load real data age_obs, age_err, age_errp, age_errm, period_obs, period_err, bv_obs, bv_err, \ logg_obs, logg_err, logg_errp, logg_errm, flag = load_dat(fname, train, cv) pl.clf() pl.errorbar(age_obs, period_obs, xerr=age_err, yerr=period_err, fmt='k.', capsize=0, ecolor='.8') # pl.show() # Now generate samples nsamp = 100 # FIXME np.random.seed(12) age_samp = np.vstack([x0+xe*np.random.randn(nsamp) for x0, xe in zip(age_obs, age_err)]) np.random.seed(12) bv_samp = np.vstack([x0+xe*np.random.randn(nsamp) for x0, xe in zip(bv_obs, bv_err)]) np.random.seed(12) logg_samp = np.vstack([x0+xe*np.random.randn(nsamp) for x0, xe in zip(logg_obs, logg_err)]) np.random.seed(12) period_samp = np.vstack([x0+xe*np.random.randn(nsamp) for x0, xe in zip(period_obs, period_err)]) if sampling: print 'initial likelihood = ', lnlike(par_true, age_samp, bv_samp, \ period_samp, logg_samp, age_obs, age_err, bv_obs, bv_err, period_obs, period_err, \ logg_obs, logg_err, c) else: print 'initial likelihood = ', nslnlike(par_true, age_samp, bv_samp, \ period_samp, logg_samp, age_obs, age_err, bv_obs, bv_err, period_obs, period_err, \ logg_obs, logg_err, c) nwalkers, ndim = 32, len(par_true) p0 = [par_true+1e-4*np.random.rand(ndim) for i in range(nwalkers)] args = (age_samp, bv_samp, period_samp, logg_samp, age_obs, age_err, bv_obs, \ bv_err, period_obs, period_err, logg_obs, logg_err, c, sampling) sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args = args) print("Burn-in") p0, lp, state = sampler.run_mcmc(p0, 5000) # p0, lp, state = sampler.run_mcmc(p0, 300) sampler.reset() print("Production run") # nstep = 3000 # nruns = 500. nstep = 20000 nruns = 2000. for j in range(int(nstep/nruns)): print fname, n print datetime.datetime.now() print 'run', j p0, lp, state = sampler.run_mcmc(p0, nruns) flat = sampler.chain[:, 50:, :].reshape((-1, ndim)) mcmc_result = map(lambda v: (v[1], v[2]-v[1], v[1]-v[0]), zip(*np.percentile(flat, [16, 50, 84], axis=0))) mres = np.array(mcmc_result)[:, 0] print 'mcmc_result = ', mres print "saving samples" f = h5py.File("samples_%s" %fname, "w") data = f.create_dataset("samples", np.shape(sampler.chain)) data[:,:] = np.array(sampler.chain) f.close() samples = sampler.chain[:, 50:, :].reshape((-1, ndim)) likelihood = lnlike(mres, age_samp, bv_samp, period_samp, logg_samp, age_obs, age_err, bv_obs, bv_err, period_obs, period_err, logg_obs, logg_err, c) print 'likelihood = ', likelihood # np.savetxt('likelihood%s%s.txt'%(n, fname), likelihood) # save parameters and print to screen print 'initial values', par_true np.savetxt("parameters%s%s.txt" %(n, fname), np.array(mcmc_result)) mcmc_result = np.array(mcmc_result)[:, 0] mcmc_result = [mcmc_result[0], mcmc_result[1], mcmc_result[2], c, \ mcmc_result[3], mcmc_result[4]] # save samples f = h5py.File("samples_%s%s" %(n, fname), "w") data = f.create_dataset("samples", np.shape(sampler.chain)) data[:,:] = np.array(sampler.chain) f.close()