예제 #1
0
파일: cross_val.py 프로젝트: RuthAngus/Gyro
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)
예제 #2
0
파일: cross_val.py 프로젝트: RuthAngus/Gyro
        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))
예제 #3
0
파일: all_gyro.py 프로젝트: dfm/Gyro
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()