def test_normal_prior(self): space_dim = 2 num_IS = 2 true_hyper, data = get_random_gp_data(space_dim, num_IS, 500) hyperparam_search_domain = pythonTensorProductDomain([ClosedInterval(bound[0], bound[1]) for bound in numpy.repeat([[0.01, 2.]], len(true_hyper), axis=0)]) hyper_bounds = [(0.01, 100.) for i in range(len(true_hyper))] multistart_pts = hyperparam_search_domain.generate_uniform_random_points_in_domain(1) cov = MixedSquareExponential(hyperparameters=multistart_pts[0,:], total_dim=space_dim+1, num_is=num_IS) test_prior = NormalPrior(5.*numpy.ones(len(true_hyper)), 25. * numpy.eye(len(true_hyper))) hyper_test, f, output = hyper_opt(cov, data=data, init_hyper=multistart_pts[0, :], hyper_bounds=hyper_bounds, approx_grad=False, hyper_prior=test_prior) good_prior = NormalPrior(true_hyper, 0.1 * numpy.eye(len(true_hyper))) hyper_good_prior, _, _ = hyper_opt(cov, data=data, init_hyper=multistart_pts[0, :], hyper_bounds=hyper_bounds, approx_grad=False, hyper_prior=good_prior) bad_prior = NormalPrior(numpy.ones(len(true_hyper)), 0.1 * numpy.eye(len(true_hyper))) hyper_bad_prior, _, _ = hyper_opt(cov, data=data, init_hyper=multistart_pts[0, :], hyper_bounds=hyper_bounds, approx_grad=False, hyper_prior=bad_prior) print "true hyper: {0}\n hyper test: {1}\n good prior: {2}\n bad prior:\n should close to one {3}".format(true_hyper, hyper_test, hyper_good_prior, hyper_bad_prior) print "dim {0}, num_is {1}".format(space_dim, num_IS)
data_list, bias_sq_list = createHistoricalDataForMisoEI(obj_func_min.getDim(), listPrevData, directory=pathToPickles, bias_filename=bias_filename) ############################################### ############################################### ### Begin hyper opt hyper_result = [] for data in data_list: # Setup prior for MAP prior_mean = np.concatenate(([np.var(data.points_sampled_value)], [1.]*obj_func_min.getDim())) prior_sig = np.eye(obj_func_min.getDim()+1) * 100. prior_sig[0,0] = np.power(prior_mean[0]/5., 2.) prior = NormalPrior(prior_mean, prior_sig) hyper_bounds = [(0.1, prior_mean[i]+2.*np.sqrt(prior_sig[i,i])) for i in range(obj_func_min.getDim()+1)] print "hyper bound {0}".format(hyper_bounds) hyperparam_search_domain = pythonTensorProductDomain([ClosedInterval(bound[0], bound[1]) for bound in hyper_bounds]) multistart_pts = hyperparam_search_domain.generate_uniform_random_points_in_domain(num_hyper_multistart) best_f = np.inf cov = SquareExponential(prior_mean) for i in range(num_hyper_multistart): hyper, f, output = hyper_opt(cov, data=data, init_hyper=multistart_pts[i, :], hyper_bounds=hyper_bounds, approx_grad=False, hyper_prior=prior) # print output if f < best_f: best_hyper = hyper best_f = f print 'best_hyper=' + str(best_hyper) print 'best_f= ' + str(best_f) print "prior mean is: {0}".format(prior_mean) hyper_result = np.concatenate((hyper_result, best_hyper)) sql_util.write_array_to_table("mei_hyper_{0}".format(obj_func_min.getFuncName()), hyper_result)