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
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 = [
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,))
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),
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 = [ #