return instance def get_KernelAdaptiveLangevin_instance(D, target_log_pdf): step_size = 1. m = 500 surrogate = KernelExpFiniteGaussian(sigma=10, lmbda=1., m=m, D=D) logger.info("kernel exp family uses %s" % surrogate.get_parameters()) instance = KernelAdaptiveLangevin(D, target_log_pdf, surrogate, step_size) return instance if __name__ == '__main__': Log.set_loglevel(20) D = 2 bananicity = 0.03 V = 100 true_mean = np.zeros(D) true_var = np.ones(D) true_var[0] = 100 true_var[1] = 20 true_cov = np.diag(true_var) num_iter_per_particle = 200 population_sizes = [5, 10, 25, 50, 100] num_repetitions = 30
proposal_mu = np.array([ 0.19404095, -0.14017837, 0.35465807, -0.22049461, -4.53669311]) proposal_var = np.array([ 0.0898059 , 0.07987 , 0.60627872, 2.79810551, 4.48372874]) proposal_L_C = np.diag(np.sqrt(proposal_var)) proposal_L_C *= 2 # these results were averaged over many repetitions. # mean: array([ 0.18482533, -0.13985885, 0.29183487, -0.52620493, -4.62597391]) # var: array([ 0.10732838, 0.10290396, 0.51048946, 2.92114185, 4.70979457]) # np.mean(var): 1.670 # np.linalg.norm(mean): 4.671 instance = AdaptiveIndependentMetropolis(D, target_log_pdf, gamma2, proposal_mu, proposal_L_C) return instance if __name__ == '__main__': Log.set_loglevel(10) num_iter_per_particle = 100 population_size = 50 num_iter = population_size * num_iter_per_particle mdl = SVoneSP500Model() target_log_pdf = mdl.get_logpdf_closure() # number of particles used for integrating out the latent variables mdl.mdl_param.NX = mdl.mdl_param.NX * 1 D = mdl.dim start = np.zeros(D) sampler = get_AdaptiveIndependentMetropolis_instance(D, target_log_pdf)
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 = [