示例#1
0
 def get_OracleKernelAdaptiveLangevin_instance(D, target_log_pdf):
     step_size = 1.
     m = 500
     N = 5000
     Z = sample_banana(N, D, bananicity, V)
     
     surrogate = KernelExpFiniteGaussian(sigma=10, lmbda=.001, m=m, D=D)
     surrogate.fit(Z)
     
     if False:
         param_bounds = {'sigma': [-2, 3]}
         bo = BayesOptSearch(surrogate, Z, param_bounds)
         best_params = bo.optimize()
         surrogate.set_parameters_from_dict(best_params)
     
     if False:
         sigma = 1. / gamma_median_heuristic(Z)
         surrogate.set_parameters_from_dict({'sigma': sigma})
     
     logger.info("kernel exp family uses %s" % surrogate.get_parameters())
 
     if False:
         import matplotlib.pyplot as plt
         Xs = np.linspace(-30, 30, 50)
         Ys = np.linspace(-20, 40, 50)
         visualise_fit_2d(surrogate, Z, Xs, Ys)
         plt.show()
         
     instance = OracleKernelAdaptiveLangevin(D, target_log_pdf, surrogate, step_size)
     
     return instance
示例#2
0
    def get_OracleKernelAdaptiveLangevin_instance(D, target_log_pdf):
        step_size = 1.
        m = 500
        N = 5000
        Z = sample_banana(N, D, bananicity, V)

        surrogate = KernelExpFiniteGaussian(sigma=10, lmbda=.001, m=m, D=D)
        surrogate.fit(Z)

        if False:
            param_bounds = {'sigma': [-2, 3]}
            bo = BayesOptSearch(surrogate, Z, param_bounds)
            best_params = bo.optimize()
            surrogate.set_parameters_from_dict(best_params)

        if False:
            sigma = 1. / gamma_median_heuristic(Z)
            surrogate.set_parameters_from_dict({'sigma': sigma})

        logger.info("kernel exp family uses %s" % surrogate.get_parameters())

        if False:
            import matplotlib.pyplot as plt
            Xs = np.linspace(-30, 30, 50)
            Ys = np.linspace(-20, 40, 50)
            visualise_fit_2d(surrogate, Z, Xs, Ys)
            plt.show()

        instance = OracleKernelAdaptiveLangevin(D, target_log_pdf, surrogate,
                                                step_size)

        return instance
示例#3
0
def test_KernelExpFiniteGaussian_fit_equals_update_fit():
    sigma = 1.
    lmbda = 2.
    m = 2
    N = 1
    D = 2

    rng_state = np.random.get_state()

    np.random.seed(0)
    est_batch = KernelExpFiniteGaussian(sigma, lmbda, m, D)
    np.random.seed(0)
    est_update = KernelExpFiniteGaussian(sigma, lmbda, m, D)

    np.random.set_state(rng_state)

    assert_equal(est_batch.b, None)
    assert_equal(est_update.b, None)
    assert_equal(est_batch.L_C, None)
    assert_allclose(est_batch.n, est_update.n)

    assert_allclose(est_batch.theta, np.zeros(m))
    assert_allclose(est_update.theta, np.zeros(m))

    X = np.random.randn(N, D)
    est_batch.fit(X)

    est_update.update_fit(X)

    assert_allclose(est_batch.b, est_update.b)
    assert_allclose(est_batch.L_C, est_update.L_C)
    assert_allclose(est_batch.n, est_update.n)
    assert_allclose(est_batch.theta, est_update.theta)
示例#4
0
class KernelExpFiniteGaussianSurrogate(StaticSurrogate):
    def __init__(self, ndim, sigma, lmbda, m):
        self.surrogate = KernelExpFiniteGaussian(sigma, lmbda, m, D=ndim)

    def train(self, samples):
        self.surrogate.fit(samples)

    def log_pdf_gradient(self, x):
        return self.surrogate.grad(x)
示例#5
0
def test_KernelExpFiniteGaussian_fit_less_than_m_data_execute():
    sigma = 1.
    lmbda = 1.
    m = 20
    N = 10
    D = 2
    est = KernelExpFiniteGaussian(sigma, lmbda, m, D)

    X = np.random.randn(N, D)
    est.fit(X)
示例#6
0
def test_KernelExpFiniteGaussian_fit_exactly_m_data_execute():
    sigma = 1.
    lmbda = 1.
    m = 2
    N = m
    D = 2
    est = KernelExpFiniteGaussian(sigma, lmbda, m, D)

    X = np.random.randn(N, D)
    est.fit(X)
示例#7
0
def test_third_order_derivative_tensor_execute():
    if not theano_available:
        raise SkipTest("Theano not available.")
    sigma = 1.
    lmbda = 1.
    N = 100
    D = 2
    m = 10
    X = np.random.randn(N, D)

    est = KernelExpFiniteGaussian(sigma, lmbda, m, D)
    est.fit(X)
    est.third_order_derivative_tensor(X[0])
示例#8
0
def test_hessian_execute():
    if not theano_available:
        raise SkipTest("Theano not available.")
    sigma = 1.
    lmbda = 1.
    N = 100
    D = 2
    m = 10
    X = np.random.randn(N, D)

    est = KernelExpFiniteGaussian(sigma, lmbda, m, D)
    est.fit(X)
    est.hessian(X[0])
def get_OracleKernelAdaptiveLangevin_instance(D, target_log_pdf, grad):
    
    step_size = 1.
    schedule = one_over_sqrt_t_schedule
    acc_star = 0.574
    N = 500
    m = 500
    Z = sample_banana(N=N, D=D, bananicity=0.03, V=100)
    
    surrogate = KernelExpFiniteGaussian(sigma=10, lmbda=1., m=m, D=D)
    surrogate.fit(Z)
    
    instance = OracleKernelAdaptiveLangevin(D, target_log_pdf, surrogate, step_size, schedule, acc_star)
    
    return instance
    lmbda = 0.01
    
    grad = lambda x: est.grad(np.array([x]))[0]
    s =  GaussianQuadraticTest(grad)
    num_bootstrap = 200
    
    result_fname = os.path.splitext(os.path.basename(__file__))[0] + ".txt"
    
    num_repetitions = 150
    for _ in range(num_repetitions):
        for m in ms_fit:
            est = KernelExpFiniteGaussian(sigma, lmbda, m, D)
            X_test = np.random.randn(N_test, D)
            
            X = np.random.randn(N_fit, D)
            est.fit(X)
            
            U_matrix, stat = s.get_statistic_multiple(X_test[:,0])
        
            bootsraped_stats = np.empty(num_bootstrap)
            for i in range(num_bootstrap):
                W = np.sign(np.random.randn(N_test))
                WW = np.outer(W, W)
                st = np.mean(U_matrix * WW)
                bootsraped_stats[i] = N_test * st
            
            p_value = np.mean(bootsraped_stats>stat)
            print m, p_value

            store_results(result_fname,
                          D=D,
 
 print "log2_sigmas:", log2_sigmas
 print "sigmas:", 2 ** log2_sigmas
 Js_mean = np.zeros(res)
 Js_var = np.zeros(res)
 
 for i, log2_sigma in enumerate(log2_sigmas):
     sigma = 2 ** log2_sigma
     surrogate = KernelExpFiniteGaussian(sigma=sigma, lmbda=lmbda, m=m, D=benchmark_samples.shape[1])
     vals = surrogate.xvalidate_objective(benchmark_samples)
     Js_mean[i] = np.mean(vals)
     Js_var[i] = np.var(vals)
     print "log2_sigma: %.3f, sigma: %.3f, mean: %.3f, var: %.3f" % (log2_sigma, sigma, Js_mean[i], Js_var[i])
     
     surrogate = KernelExpFiniteGaussian(sigma=sigma, lmbda=lmbda, m=m, D=benchmark_samples.shape[1])
     surrogate.fit(benchmark_samples)
     fake = empty_class()
     
     def replace_2(x_2d, a, i, j):
         a = a.copy()
         a[i] = x_2d[0]
         a[j] = x_2d[1]
         return a
         
     for i in range(benchmark_samples.shape[1]):
         for j in range(benchmark_samples.shape[1]):
             if i == j:
                 continue
             fake.log_pdf = lambda x_2d: surrogate.log_pdf(replace_2(x_2d, true_mean, i, j))
             fake.grad = lambda x_2d: surrogate.grad(replace_2(x_2d, true_mean, i, j))
                                                                            
示例#12
0
        sigma = 2**log2_sigma
        surrogate = KernelExpFiniteGaussian(sigma=sigma,
                                            lmbda=lmbda,
                                            m=m,
                                            D=benchmark_samples.shape[1])
        vals = surrogate.xvalidate_objective(benchmark_samples)
        Js_mean[i] = np.mean(vals)
        Js_var[i] = np.var(vals)
        print "log2_sigma: %.3f, sigma: %.3f, mean: %.3f, var: %.3f" % (
            log2_sigma, sigma, Js_mean[i], Js_var[i])

        surrogate = KernelExpFiniteGaussian(sigma=sigma,
                                            lmbda=lmbda,
                                            m=m,
                                            D=benchmark_samples.shape[1])
        surrogate.fit(benchmark_samples)
        fake = empty_class()

        def replace_2(x_2d, a, i, j):
            a = a.copy()
            a[i] = x_2d[0]
            a[j] = x_2d[1]
            return a

        for i in range(benchmark_samples.shape[1]):
            for j in range(benchmark_samples.shape[1]):
                if i == j:
                    continue
                fake.log_pdf = lambda x_2d: surrogate.log_pdf(
                    replace_2(x_2d, true_mean, i, j))
                fake.grad = lambda x_2d: surrogate.grad(
    lmbda = 0.01

    grad = lambda x: est.grad(np.array([x]))[0]
    s = GaussianQuadraticTest(grad)
    num_bootstrap = 200

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

    num_repetitions = 150
    for _ in range(num_repetitions):
        for m in ms_fit:
            est = KernelExpFiniteGaussian(sigma, lmbda, m, D)
            X_test = np.random.randn(N_test, D)

            X = np.random.randn(N_fit, D)
            est.fit(X)

            U_matrix, stat = s.get_statistic_multiple(X_test[:, 0])

            bootsraped_stats = np.empty(num_bootstrap)
            for i in range(num_bootstrap):
                W = np.sign(np.random.randn(N_test))
                WW = np.outer(W, W)
                st = np.mean(U_matrix * WW)
                bootsraped_stats[i] = N_test * st

            p_value = np.mean(bootsraped_stats > stat)
            print m, p_value

            store_results(result_fname,
                          D=D,
示例#14
0
                    log_pdf,
                    accepted,
                    log_pdf_density=surrogate,
                    step_sizes=step_sizes)
    plt.suptitle("KMC lite %s, acceptance rate: %.2f" % \
                 (surrogate.__class__.__name__, np.mean(accepted)))

    # now initialise KMC finite with the samples from the surrogate, and run for more
    # learn parameters before starting
    thinned = samples[np.random.permutation(len(samples))[:N]]
    surrogate2 = KernelExpFiniteGaussian(sigma=2, lmbda=0.001, D=D, m=N)
    surrogate2.set_parameters_from_dict(
        BayesOptSearch(surrogate2, thinned, {
            'sigma': [-3, 3]
        }).optimize(3))
    surrogate2.fit(thinned)

    # now use conservative schedule, or None at all if confident in oracle samples
    schedule2 = lambda t: 0.01 if t < 3000 else 0.
    kmc2 = KMC(surrogate2, target, momentum, kmc.num_steps_min,
               kmc.num_steps_max, kmc.step_size[0], kmc.step_size[1],
               schedule2, acc_star)

    # run MCMC
    samples2, proposals2, accepted2, acc_prob2, log_pdf2, times2, step_sizes = mini_mcmc(
        kmc2, start, num_iter, D)
    visualise_trace(samples2,
                    log_pdf2,
                    accepted2,
                    log_pdf_density=surrogate2,
                    step_sizes=step_sizes)
    # set to around 5000-10000 iterations to have KMC lite explored all of the support
    start = np.zeros(D)
    start[1] = -3
    num_iter = 500
    
    # run MCMC
    samples, proposals, accepted, acc_prob, log_pdf, times, step_sizes = mini_mcmc(kmc, start, num_iter, D)
    
    visualise_trace(samples, log_pdf, accepted, log_pdf_density=surrogate, step_sizes=step_sizes)
    plt.suptitle("KMC lite %s, acceptance rate: %.2f" % \
                 (surrogate.__class__.__name__, np.mean(accepted)))
    
    # now initialise KMC finite with the samples from the surrogate, and run for more
    # learn parameters before starting
    thinned = samples[np.random.permutation(len(samples))[:N]]
    surrogate2 = KernelExpFiniteGaussian(sigma=2, lmbda=0.001, D=D, m=N)
    surrogate2.set_parameters_from_dict(BayesOptSearch(surrogate2, thinned, {'sigma': [-3,3]}).optimize(3))
    surrogate2.fit(thinned)
    
    # now use conservative schedule, or None at all if confident in oracle samples
    schedule2 = lambda t: 0.01 if t < 3000 else 0.
    kmc2 = KMC(surrogate2, target,
              momentum, kmc.num_steps_min, kmc.num_steps_max, kmc.step_size[0], kmc.step_size[1],
              schedule2, acc_star)

    # run MCMC
    samples2, proposals2, accepted2, acc_prob2, log_pdf2, times2, step_sizes = mini_mcmc(kmc2, start, num_iter, D)
    visualise_trace(samples2, log_pdf2, accepted2, log_pdf_density=surrogate2, step_sizes=step_sizes)
    plt.suptitle("KMC finite, %s, acceptance rate: %.2f" % \
                 (surrogate.__class__.__name__, np.mean(accepted2)))
    plt.show()