示例#1
0
def plot_gef_load_Z01_smooth_2d_mean():

    X, y, D = fear_load_mat('../data/gef_load_full_Xy.mat', 1)

    kernel = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
             (fk.MaskKernel(D, 0, fk.SqExpPeriodicKernel(-0.823413, 0.000198, -0.917064)) + fk.MaskKernel(D, 0, fk.RQKernel(-0.459219, -0.077250, -2.212718)))

    kernel_1 = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
               fk.MaskKernel(D, 0, fk.SqExpPeriodicKernel(-0.823413, 0.000198, -0.917064))

    kernel_2 = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
               fk.MaskKernel(D, 0, fk.RQKernel(-0.459219, -0.077250, -2.212718))

    min_T = -3.0
    max_T = 1.0
    N_T = 10

    temps = np.repeat(np.linspace(min_T, max_T, N_T), 499)

    input = np.tile(X[0:499, :], (N_T, 1))
    input[:, 9] = temps

    posterior_mean = gpml.posterior_mean(kernel,
                                         kernel_2,
                                         X[0:499, :],
                                         y[0:499],
                                         input,
                                         iters=300)

    X_plt = X[0:499, 0]
    Y_plt = np.linspace(min_T, max_T, N_T)
    Z_plt = np.reshape(posterior_mean, (N_T, 499), 'A')

    data = {'X': X_plt, 'Y': Y_plt, 'Z': Z_plt, 'post_mean': posterior_mean}
    scipy.io.savemat('temp_data.mat', data)
示例#2
0
def plot_gef_load_Z01_split_mean_temp():

    X, y, D = fear_load_mat('../data/gef_load_full_Xy.mat', 1)

    kernel = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
             (fk.MaskKernel(D, 0, fk.SqExpPeriodicKernel(-0.823413, 0.000198, -0.917064)) + fk.MaskKernel(D, 0, fk.RQKernel(-0.459219, -0.077250, -2.212718)))

    kernel_1 = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
               fk.MaskKernel(D, 0, fk.SqExpPeriodicKernel(-0.823413, 0.000198, -0.917064))

    posterior_mean_1 = gpml.posterior_mean(kernel,
                                           kernel_1,
                                           X[0:499, :],
                                           y[0:499],
                                           iters=10)

    kernel_2 = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
               fk.MaskKernel(D, 0, fk.RQKernel(-0.459219, -0.077250, -2.212718))

    posterior_mean_2 = gpml.posterior_mean(kernel,
                                           kernel_2,
                                           X[0:499, :],
                                           y[0:499],
                                           iters=10)

    plt.figure()
    host = host_subplot(111, axes_class=AA.Axes)
    plt.subplots_adjust(right=0.85)

    par1 = host.twinx()

    #    host.set_xlim(0, 2)
    #    host.set_ylim(0, 2)

    host.set_xlabel("Temperature (T09)")
    #    par1.set_ylabel("Periodic component")
    plt.title('Posterior mean function')
    host.set_ylabel("Load posterior mean")

    p2, = host.plot(X[0:499, 9], y[0:499], 'o', alpha=0.5)
    p1, = host.plot(X[0:499, 9], posterior_mean_2, 'o')

    #    par1.set_ylim(0, 4)

    host.legend()

    host.axis["left"].label.set_color(p1.get_color())
    #    par1.axis["right"].label.set_color(p2.get_color())

    plt.draw()
    plt.show()
示例#3
0
def fear_experiment(data_file, results_filename, y_dim=1, subset=None, max_depth=2, k=2, verbose=True, sleep_time=60, n_sleep_timeout=20, re_submit_wait=60, \
                    description=''):
    '''Recursively search for the best kernel'''

    X, y, D = fear_load_mat(data_file, y_dim)

    # Subset if necessary
    if not subset is None:
        X = X[subset, :]
        y = y[subset]

    ##### This should be abstracted
    seed_kernels = [fk.MaskKernel(D, i, fk.SqExpKernel(0., 0.))  for i in range(D)] + \
                   [fk.MaskKernel(D, i, fk.SqExpPeriodicKernel(0., 0., 0.))  for i in range(D)] + \
                   [fk.MaskKernel(D, i, fk.RQKernel(0., 0., 0.))  for i in range(D)]

    nll_key = 1
    laplace_key = 2
    BIC_key = 3
    active_key = BIC_key

    results = []
    results_sequence = []
    for r in range(max_depth):
        if r == 0:
            new_results = fear_run_experiments(seed_kernels, X, y, verbose=verbose, \
                                               sleep_time=sleep_time, n_sleep_timeout=n_sleep_timeout, re_submit_wait=re_submit_wait)
        else:
            new_results = fear_run_experiments(fear_expand_kernels(D, seed_kernels, verbose=verbose), X, y, verbose=verbose, \
                                               sleep_time=sleep_time, n_sleep_timeout=n_sleep_timeout, re_submit_wait=re_submit_wait)

        results = results + new_results

        print
        results = sorted(results, key=lambda p: p[active_key], reverse=True)
        for kernel, nll, laplace, BIC in results:
            print nll, laplace, BIC, kernel.pretty_print()

        seed_kernels = [
            r[0] for r in sorted(new_results, key=lambda p: p[active_key])[0:k]
        ]

        results_sequence.append(results)

    # Write results to a file
    results = sorted(results, key=lambda p: p[active_key], reverse=True)
    with open(results_filename, 'w') as outfile:
        outfile.write(
            'Experiment results for\n datafile = %s\n y_dim = %d\n subset = %s\n max_depth = %f\n k = %f\n Description = %s\n\n'
            % (data_file, y_dim, subset, max_depth, k, description))
        for (i, results) in enumerate(results_sequence):
            outfile.write('\n%%%%%%%%%% Level %d %%%%%%%%%%\n\n' % i)
            for kernel, nll, laplace, BIC in results:
                outfile.write('nll=%f, laplace=%f, BIC=%f, kernel=%s\n' %
                              (nll, laplace, BIC, kernel.__repr__()))
示例#4
0
def plot_gef_load_Z01():
    # This kernel was chosen from a run of gef_load datapoints.
    #    kernel = eval(ProductKernel([ covMask(ndim=12, active_dimension=0, base_kernel=RQKernel(lengthscale=0.268353, output_variance=-0.104149, alpha=-2.105742)), covMask(ndim=12, active_dimension=9, base_kernel=SqExpKernel(lengthscale=1.160242, output_variance=0.004344)), SumKernel([ covMask(ndim=12, active_dimension=0, base_kernel=SqExpPeriodicKernel(lengthscale=-0.823413, period=0.000198, output_variance=-0.917064)), covMask(ndim=12, active_dimension=0, base_kernel=RQKernel(lengthscale=-0.459219, output_variance=-0.077250, alpha=-2.212718)) ]) ]))

    X, y, D = fear_load_mat('../data/gef_load_full_Xy.mat', 1)

    kernel = fk.MaskKernel(D, 0, fk.RQKernel(0.268353, -0.104149, -2.105742)) * fk.MaskKernel(D, 9, fk.SqExpKernel(1.160242, 0.004344)) * \
             (fk.MaskKernel(D, 0, fk.SqExpPeriodicKernel(-0.823413, 0.000198, -0.917064)) + fk.MaskKernel(D, 0, fk.RQKernel(-0.459219, -0.077250, -2.212718)))

    # Todo: set random seed.
    sample = gpml.sample_from_gp_prior(kernel, X[0:499, :])

    pylab.figure()
    pylab.plot(X[0:499, 0], y[0:499])
    pylab.title('GEFCom2012 Z01 and T09 - first 500 data points')
    pylab.xlabel('Time')
    pylab.ylabel('Load')
示例#5
0
def full_gef_load_experiment(zone=1, max_depth=5, verbose=True):
    '''Round 2'''

    #    seed_kernels = [fk.MaskKernel(2, 0, fk.SqExpKernel(0, 0)),
    #                    fk.MaskKernel(2, 1, fk.SqExpKernel(0, 0))]

    seed_kernels = [fk.MaskKernel(12, i, fk.SqExpKernel(0., 0.))  for i in range(12)] + \
                   [fk.MaskKernel(12, i, fk.SqExpPeriodicKernel(0., 0., 0.))  for i in range(12)] + \
                   [fk.MaskKernel(12, i, fk.RQKernel(0., 0., 0.))  for i in range(12)]

    X, y = load_full_gef_load()
    # subsample data.
    X = X[0:299, :]
    y = y[0:299, zone - 1]

    #    max_depth = 5
    k = 2  # Expand k best
    nll_key = 1
    BIC_key = 2
    active_key = BIC_key

    results = []
    for i in range(max_depth):
        if i:
            expand = True
        else:
            expand = False
        new_results = structure_search.try_expanded_kernels(
            X,
            y,
            D=12,
            seed_kernels=seed_kernels,
            expand=expand,
            verbose=verbose)
        results = results + new_results

        print
        results = sorted(results, key=lambda p: p[active_key], reverse=True)
        for kernel, nll, BIC in results:
            print nll, BIC, kernel.pretty_print()

        seed_kernels = [
            r[0] for r in sorted(new_results, key=lambda p: p[active_key])[0:k]
        ]