예제 #1
0
    true_std_devs = (20, 5, 0.25)
    noisy_data = gen_data_from_multi_src(eval_model, true_std_devs, plot=True)
    num_samples = 50000
    burnin = int(num_samples / 2)
    num_params = 5
    init_inputs = np.array([[1] * num_params, [2] * num_params])
    cov = np.eye(num_params)

    src_num_pts = (NUM_DATA_PTS, NUM_DATA_PTS, NUM_DATA_PTS)
    src_std_devs = (None, None, None)  # estimate all 3 source std devs
    log_like_args = [src_num_pts, src_std_devs]
    log_like_func = MultiSourceNormal

    priors = [ImproperUniform(0., 6.), ImproperUniform(0., 6.)] + \
             [ImproperUniform(0, None)] * 3 # priors for all 3 source std devs
    vector_mcmc = VectorMCMC(eval_model, noisy_data, priors, log_like_args,
                             log_like_func)

    chain = vector_mcmc.metropolis(init_inputs,
                                   num_samples,
                                   cov,
                                   adapt_interval=200,
                                   adapt_delay=5000,
                                   progress_bar=True)

    plot_mcmc_chain(chain,
                    param_labels=['a', 'b', 'std1', 'std2', 'std3'],
                    burnin=burnin,
                    include_kde=True)
예제 #2
0
from smcpy.mcmc.vector_mcmc import VectorMCMC
from smcpy.utils.plotter import plot_mcmc_chain
from run_example_known_std import *

if __name__ == '__main__':

    np.random.seed(200)

    noisy_data = generate_data(eval_model, plot=False)

    num_samples = 10000
    burnin = 5000
    std_dev = None  # estimate it; requires mod to init_inputs, cov, and priors
    init_inputs = np.array([[1, 1, 1], [2, 2, 2]])
    cov = np.eye(3)

    priors = [uniform(0., 6.), uniform(0., 6.), uniform(0, 10)]
    vector_mcmc = VectorMCMC(eval_model, noisy_data, priors, std_dev)

    chain = vector_mcmc.metropolis(init_inputs,
                                   num_samples,
                                   cov,
                                   adapt_interval=200,
                                   adapt_delay=100,
                                   progress_bar=True)

    plot_mcmc_chain(chain,
                    param_labels=['a', 'b', 'std'],
                    burnin=burnin,
                    include_kde=True)
예제 #3
0
from smcpy.mcmc.vector_mcmc import VectorMCMC
from smcpy.mcmc.vector_mcmc_kernel import VectorMCMCKernel
from smcpy.utils.plotter import plot_pairwise

from run_example_known_std import *

if __name__ == '__main__':

    np.random.seed(200)

    noisy_data = generate_data(eval_model, plot=False)

    std_dev = None  # estimate it; requires prior for std_dev and param_order

    priors = [uniform(0., 6.), uniform(0., 6.), uniform(0, 10)]
    vector_mcmc = VectorMCMC(eval_model, noisy_data, priors, std_dev)
    mcmc_kernel = VectorMCMCKernel(vector_mcmc, param_order=('a', 'b', 'std'))

    smc = SMCSampler(mcmc_kernel)
    phi_sequence = np.linspace(0, 1, 20)
    step_list, mll_list = smc.sample(num_particles=500,
                                     num_mcmc_samples=5,
                                     phi_sequence=phi_sequence,
                                     ess_threshold=1.0,
                                     progress_bar=True)

    print('marginal log likelihood = {}'.format(mll_list[-1]))
    print('parameter means = {}'.format(step_list[-1].compute_mean()))

    plot_pairwise(step_list[-1].params, step_list[-1].weights,
                  ['a', 'b', 'std'])
예제 #4
0
def vector_mcmc(stub_model, data, priors):
    return VectorMCMC(stub_model, data, priors)
예제 #5
0
파일: run_example.py 프로젝트: nasa/SMCPy
if __name__ == "__main__":

    np.random.seed(2)

    true_mean = 1
    true_std = 2
    n_data_pts = 100
    n_samples = 6000
    burnin = 0
    param_names = ['mean', 'std']

    model = lambda x: np.tile(x[:, 0], (1, n_data_pts))
    data = np.random.normal(1, 2, n_data_pts)
    priors = [ImproperUniform(), ImproperUniform(0, None)]
    x0 = np.array([[-3, 7]])
    cov = np.eye(2) * 0.001

    vmcmc = VectorMCMC(model, data, priors)
    chain = vmcmc.metropolis(x0,
                             n_samples,
                             cov,
                             adapt_interval=100,
                             adapt_delay=1000,
                             progress_bar=True)

    burnin, z = compute_geweke(chain[0], window_pct=10, step_pct=1)

    plot_mcmc_chain(chain, param_names)
    plot_geweke(burnin, z, param_names)