示例#1
0
from kameleon_rks.experiments.tools import store_samples

result_fname = os.path.splitext(os.path.basename(__file__))[0] + ".txt"

if __name__ == '__main__':
    import time
    
    from kameleon_rks.examples.plotting import visualise_pairwise_marginals
    from kameleon_rks.proposals.Metropolis import AdaptiveIndependentMetropolis
    from kameleon_rks.samplers.mini_pmc import mini_pmc
    from kameleon_rks.tools.log import Log
    import numpy as np
    
    from smc2.sv_models import SVoneSP500Model
    
    logger = Log.get_logger()


    def get_AdaptiveIndependentMetropolis_instance(D, target_log_pdf):
        gamma2 = 0.1
        
#         # run 1 (initial parameters from Ingmar's pilot runs)
#         proposal_mu = np.array([ -0.17973298, 0.11796741, 0.86733172, 0.52834129, -3.32354247])
#         proposal_var = np.array([  0.01932092, 0.02373668, 0.02096583, 0.1566503 , 0.46316933])
#         proposal_L_C = np.diag(np.sqrt(proposal_var))
#         proposal_L_C *= 2
#         # resuts:
#         # mean: array([ 0.08820961, -0.03436691,  0.7178945,   0.54124475, -3.77499049])
#         # var: array([ 0.01514925,  0.01407534,  0.056966,    0.37502436,  0.5887545])
#         # np.mean(var): 0.201
#         # np.linalg.norm(mean): 3.882
示例#2
0
import time

from kameleon_rks.tools.log import Log
import numpy as np

logger = Log.get_logger()


def mini_mcmc(transition_kernel,
              start,
              num_iter,
              D,
              recompute_log_pdf=False,
              time_budget=None):
    # MCMC results
    samples = np.zeros((num_iter, D)) + np.nan
    proposals = np.zeros((num_iter, D)) + np.nan
    accepted = np.zeros(num_iter) + np.nan
    acc_prob = np.zeros(num_iter) + np.nan
    log_pdf = np.zeros(num_iter) + np.nan
    step_sizes = np.zeros(num_iter) + np.nan

    # timings for output and time limit
    times = np.zeros(num_iter)
    last_time_printed = time.time()

    # for adaptive transition kernels
    avg_accept = 0.

    # init MCMC (first iteration)
    current = start
    return instance


def get_AdaptiveLangevin(D, target_log_pdf, grad, prec=False, step_size=1):

    acc_star = 0.574
    gamma2 = 0.1
    instance = AdaptiveLangevin(D, target_log_pdf, grad, step_size,
                                one_over_4th_root_t_schedule, acc_star)
    instance.do_preconditioning = prec
    instance.manual_gradient_step_size = 1
    return instance


if __name__ == '__main__':
    Log.set_loglevel(20)
    max_moment = 8
    D = 10
    pop_size = 10
    bananicity = 0.03
    V = 100
    Z = sample_banana(3000, D, bananicity, V)
    moments = np.array([(Z**i).mean(0) for i in range(1, max_moment)])
    pk = PolynomialKernel(3)
    print(moments)
    true_correct = np.linalg.inv(np.cov(Z.T))
    target_log_pdf = lambda x: log_banana_pdf(
        x, bananicity, V, compute_grad=False)
    target_grad = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=True)

    samplers = [
示例#4
0
import time

from kameleon_rks.tools.log import Log
import numpy as np


logger = Log.get_logger()

def mini_mcmc(transition_kernel, start, num_iter, D, recompute_log_pdf=False, time_budget=None):
    # MCMC results
    samples = np.zeros((num_iter, D)) + np.nan
    proposals = np.zeros((num_iter, D)) + np.nan
    accepted = np.zeros(num_iter) + np.nan
    acc_prob = np.zeros(num_iter) + np.nan
    log_pdf = np.zeros(num_iter) + np.nan
    step_sizes = np.zeros(num_iter) + np.nan
    
    # timings for output and time limit
    times = np.zeros(num_iter)
    last_time_printed = time.time()
    
    # for adaptive transition kernels
    avg_accept = 0.
    
    # init MCMC (first iteration)
    current = start
    current_log_pdf = None
    current_kwargs = {}
    
    logger.info("Starting MCMC using %s in D=%d dimensions" % \
                (transition_kernel.get_name(), D,))
示例#5
0
    
    return instance

def get_AM_5(D, target_log_pdf):
    
    step_size = 5.
    acc_star = 0.234
    gamma2 = 0.1
    instance = AdaptiveMetropolis(D, target_log_pdf, step_size, gamma2, one_over_4th_root_t_schedule, acc_star)
    
    return instance
    


if __name__ == '__main__':
    Log.set_loglevel(20)
    mdl = SVoneSP500Model()
    
    #the following is the number of particles used for integrating out the latent variables
    mdl.mdl_param.NX = mdl.mdl_param.NX * 1
    
    D = mdl.dim
    pop_size=50
    target_log_pdf = mdl.get_logpdf_closure()

    samplers = [
#                get_StaticMetropolis_instance(D, target_log_pdf),
#                get_AdaptiveMetropolis_instance(D, target_log_pdf),
#                get_OracleKameleon_instance(D, target_log_pdf),
#                get_Kameleon_instance(D, target_log_pdf),
#                get_StaticLangevin_instance(D, target_log_pdf, target_grad),
    
    return instance

def get_KernelAdaptiveLangevin_instance(D, target_log_pdf, grad):
    step_size = 1.
    schedule = one_over_sqrt_t_schedule
    acc_star = 0.574
    m = 500
    
    surrogate = KernelExpFiniteGaussian(sigma=10, lmbda=1., m=m, D=D)
    instance = KernelAdaptiveLangevin(D, target_log_pdf, surrogate, step_size, schedule, acc_star)
    
    return instance

if __name__ == '__main__':
    Log.set_loglevel(20)
    D = 2
    
    bananicity = 0.03
    V = 100
    
    target_log_pdf = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=False)
    target_grad = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=True)

    samplers = [
                get_StaticMetropolis_instance(D, target_log_pdf),
                get_AdaptiveMetropolis_instance(D, target_log_pdf),
                get_OracleKameleon_instance(D, target_log_pdf),
                get_Kameleon_instance(D, target_log_pdf),
                get_StaticLangevin_instance(D, target_log_pdf, target_grad),
                get_AdaptiveLangevin_instance(D, target_log_pdf, target_grad),
    
    return instance

def get_AM_5(D, target_log_pdf):
    
    step_size = 5.
    acc_star = 0.234
    gamma2 = 0.1
    instance = AdaptiveMetropolis(D, target_log_pdf, step_size, gamma2, one_over_4th_root_t_schedule, acc_star)
    
    return instance
    


if __name__ == '__main__':
    Log.set_loglevel(20)
    D = 2
    pop_size=10
    bananicity = 0.03
    V = 100
    Z = sample_banana(700, D, bananicity, V)
    moments = np.array([(Z**i).mean(0) for i in range(1,4)])
    target_log_pdf = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=False)
    target_grad = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=True)

    samplers = [
#                get_StaticMetropolis_instance(D, target_log_pdf),
#                get_AdaptiveMetropolis_instance(D, target_log_pdf),
#                get_OracleKameleon_instance(D, target_log_pdf),
#                get_Kameleon_instance(D, target_log_pdf),
#                get_StaticLangevin_instance(D, target_log_pdf, target_grad),
示例#8
0
    return instance


def get_AM_5(D, target_log_pdf):

    step_size = 5.
    acc_star = 0.234
    gamma2 = 0.1
    instance = AdaptiveMetropolis(D, target_log_pdf, step_size, gamma2,
                                  one_over_4th_root_t_schedule, acc_star)

    return instance


if __name__ == '__main__':
    Log.set_loglevel(20)
    mdl = SVoneSP500Model()

    #the following is the number of particles used for integrating out the latent variables
    mdl.mdl_param.NX = mdl.mdl_param.NX * 1

    D = mdl.dim
    pop_size = 50
    target_log_pdf = mdl.get_logpdf_closure()

    samplers = [
        #                get_StaticMetropolis_instance(D, target_log_pdf),
        #                get_AdaptiveMetropolis_instance(D, target_log_pdf),
        #                get_OracleKameleon_instance(D, target_log_pdf),
        #                get_Kameleon_instance(D, target_log_pdf),
        #                get_StaticLangevin_instance(D, target_log_pdf, target_grad),
    return instance

def get_AdaptiveLangevin(D, target_log_pdf, grad, prec = False, step_size=1):
    

    acc_star = 0.574
    gamma2 = 0.1
    instance = AdaptiveLangevin(D, target_log_pdf, grad, step_size, one_over_4th_root_t_schedule, acc_star)
    instance.do_preconditioning = prec
    instance.manual_gradient_step_size = 1
    return instance


if __name__ == '__main__':
    Log.set_loglevel(20)
    max_moment = 8
    D = 10
    pop_size=10
    bananicity = 0.03
    V = 100
    Z = sample_banana(3000, D, bananicity, V)
    moments = np.array([(Z**i).mean(0) for i in range(1, max_moment)])
    pk = PolynomialKernel(3)
    print(moments)
    true_correct = np.linalg.inv(np.cov(Z.T))
    target_log_pdf = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=False)
    target_grad = lambda x: log_banana_pdf(x, bananicity, V, compute_grad=True)

    samplers = [
#