Пример #1
0
def test_lml_improving():
    """ Test that hyperparameter-tuning improves log-marginal likelihood. """
    for kernel in kernels:
        if kernel == fixed_kernel: continue
        gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
        assert_greater(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                       gpc.log_marginal_likelihood(kernel.theta))
Пример #2
0
def test_lml_improving():
    """ Test that hyperparameter-tuning improves log-marginal likelihood. """
    for kernel in kernels:
        if kernel == fixed_kernel: continue
        gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
        assert_greater(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                       gpc.log_marginal_likelihood(kernel.theta))
Пример #3
0
def test_lml_without_cloning_kernel(kernel):
    # Test that clone_kernel=False has side-effects of kernel.theta.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
    input_theta = np.ones(gpc.kernel_.theta.shape, dtype=np.float64)

    gpc.log_marginal_likelihood(input_theta, clone_kernel=False)
    assert_almost_equal(gpc.kernel_.theta, input_theta, 7)
Пример #4
0
def test_custom_optimizer():
    """ Test that GPC can use externally defined optimizers. """

    # Define a dummy optimizer that simply tests 50 random hyperparameters
    def optimizer(obj_func, initial_theta, bounds):
        rng = np.random.RandomState(0)
        theta_opt, func_min = \
            initial_theta, obj_func(initial_theta, eval_gradient=False)
        for _ in range(50):
            theta = np.atleast_1d(
                rng.uniform(np.maximum(-2, bounds[:, 0]),
                            np.minimum(1, bounds[:, 1])))
            f = obj_func(theta, eval_gradient=False)
            if f < func_min:
                theta_opt, func_min = theta, f
        return theta_opt, func_min

    for kernel in kernels:
        if kernel == fixed_kernel:
            continue
        gpc = GaussianProcessClassifier(kernel=kernel, optimizer=optimizer)
        gpc.fit(X, y_mc)
        # Checks that optimizer improved marginal likelihood
        assert_greater(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                       gpc.log_marginal_likelihood(kernel.theta))
Пример #5
0
def test_lml_gradient(kernel):
    # Compare analytic and numeric gradient of log marginal likelihood.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)

    lml, lml_gradient = gpc.log_marginal_likelihood(kernel.theta, True)
    lml_gradient_approx = approx_fprime(
        kernel.theta, lambda theta: gpc.log_marginal_likelihood(theta, False), 1e-10
    )

    assert_almost_equal(lml_gradient, lml_gradient_approx, 3)
Пример #6
0
def test_lml_gradient(kernel):
    # Compare analytic and numeric gradient of log marginal likelihood.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)

    lml, lml_gradient = gpc.log_marginal_likelihood(kernel.theta, True)
    lml_gradient_approx = \
        approx_fprime(kernel.theta,
                      lambda theta: gpc.log_marginal_likelihood(theta,
                                                                False),
                      1e-10)

    assert_almost_equal(lml_gradient, lml_gradient_approx, 3)
Пример #7
0
def test_converged_to_local_maximum(kernel):
    # Test that we are in local maximum after hyperparameter-optimization.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)

    lml, lml_gradient = gpc.log_marginal_likelihood(gpc.kernel_.theta, True)

    assert np.all((np.abs(lml_gradient) < 1e-4)
                  | (gpc.kernel_.theta == gpc.kernel_.bounds[:, 0])
                  | (gpc.kernel_.theta == gpc.kernel_.bounds[:, 1]))
Пример #8
0
def test_converged_to_local_maximum(kernel):
    # Test that we are in local maximum after hyperparameter-optimization.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)

    lml, lml_gradient = \
        gpc.log_marginal_likelihood(gpc.kernel_.theta, True)

    assert np.all((np.abs(lml_gradient) < 1e-4) |
                  (gpc.kernel_.theta == gpc.kernel_.bounds[:, 0]) |
                  (gpc.kernel_.theta == gpc.kernel_.bounds[:, 1]))
Пример #9
0
def test_custom_optimizer(kernel):
    # Test that GPC can use externally defined optimizers.
    # Define a dummy optimizer that simply tests 50 random hyperparameters
    def optimizer(obj_func, initial_theta, bounds):
        rng = np.random.RandomState(0)
        theta_opt, func_min = \
            initial_theta, obj_func(initial_theta, eval_gradient=False)
        for _ in range(50):
            theta = np.atleast_1d(rng.uniform(np.maximum(-2, bounds[:, 0]),
                                              np.minimum(1, bounds[:, 1])))
            f = obj_func(theta, eval_gradient=False)
            if f < func_min:
                theta_opt, func_min = theta, f
        return theta_opt, func_min

    gpc = GaussianProcessClassifier(kernel=kernel, optimizer=optimizer)
    gpc.fit(X, y_mc)
    # Checks that optimizer improved marginal likelihood
    assert_greater(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                   gpc.log_marginal_likelihood(kernel.theta))
Пример #10
0
def test_converged_to_local_maximum():
    """ Test that we are in local maximum after hyperparameter-optimization."""
    for kernel in kernels:
        if kernel == fixed_kernel: continue
        gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)

        lml, lml_gradient = \
            gpc.log_marginal_likelihood(gpc.kernel_.theta, True)

        assert_true(
            np.all((np.abs(lml_gradient) < 1e-4)
                   | (gpc.kernel_.theta == gpc.kernel_.bounds[:, 0])
                   | (gpc.kernel_.theta == gpc.kernel_.bounds[:, 1])))
Пример #11
0
def test_random_starts():
    # Test that an increasing number of random-starts of GP fitting only
    # increases the log marginal likelihood of the chosen theta.
    n_samples, n_features = 25, 2
    rng = np.random.RandomState(0)
    X = rng.randn(n_samples, n_features) * 2 - 1
    y = (np.sin(X).sum(axis=1) + np.sin(3 * X).sum(axis=1)) > 0

    kernel = C(1.0, (1e-2, 1e2)) * RBF(
        length_scale=[1e-3] * n_features, length_scale_bounds=[(1e-4, 1e2)] * n_features
    )
    last_lml = -np.inf
    for n_restarts_optimizer in range(5):
        gp = GaussianProcessClassifier(
            kernel=kernel, n_restarts_optimizer=n_restarts_optimizer, random_state=0
        ).fit(X, y)
        lml = gp.log_marginal_likelihood(gp.kernel_.theta)
        assert lml > last_lml - np.finfo(np.float32).eps
        last_lml = lml
Пример #12
0
def test_random_starts():
    # Test that an increasing number of random-starts of GP fitting only
    # increases the log marginal likelihood of the chosen theta.
    n_samples, n_features = 25, 2
    rng = np.random.RandomState(0)
    X = rng.randn(n_samples, n_features) * 2 - 1
    y = (np.sin(X).sum(axis=1) + np.sin(3 * X).sum(axis=1)) > 0

    kernel = C(1.0, (1e-2, 1e2)) \
        * RBF(length_scale=[1e-3] * n_features,
              length_scale_bounds=[(1e-4, 1e+2)] * n_features)
    last_lml = -np.inf
    for n_restarts_optimizer in range(5):
        gp = GaussianProcessClassifier(
            kernel=kernel, n_restarts_optimizer=n_restarts_optimizer,
            random_state=0).fit(X, y)
        lml = gp.log_marginal_likelihood(gp.kernel_.theta)
        assert_greater(lml, last_lml - np.finfo(np.float32).eps)
        last_lml = lml
Пример #13
0
def test_lml_improving(kernel):
    # Test that hyperparameter-tuning improves log-marginal likelihood.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
    assert gpc.log_marginal_likelihood(gpc.kernel_.theta) > gpc.log_marginal_likelihood(
        kernel.theta
    )
Пример #14
0
X = rng.randn(200, 2)
Y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)

# fit the model
plt.figure(figsize=(10, 5))
kernels = [1.0 * RBF(length_scale=1.0), 1.0 * DotProduct(sigma_0=1.0)**2]
for i, kernel in enumerate(kernels):
    clf = GaussianProcessClassifier(kernel=kernel, warm_start=True).fit(X, Y)

    # plot the decision function for each datapoint on the grid
    Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
    Z = Z.reshape(xx.shape)

    plt.subplot(1, 2, i + 1)
    image = plt.imshow(Z, interpolation='nearest',
                       extent=(xx.min(), xx.max(), yy.min(), yy.max()),
                       aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
    contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2,
                           linetypes='--')
    plt.scatter(X[:, 0], X[:, 1], s=30, c=Y, cmap=plt.cm.Paired)
    plt.xticks(())
    plt.yticks(())
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title("%s\n Log-Marginal-Likelihood:%.3f"
              % (clf.kernel_, clf.log_marginal_likelihood(clf.kernel_.theta)),
              fontsize=12)

plt.tight_layout()
plt.show()
Пример #15
0
def main():
#    mpl.style.use('classic')
    mpl.rcParams['font.size'] = FONT_SIZE
    mpl.rcParams['lines.markersize'] = MARKER_SIZE
    mpl.rcParams['lines.linewidth'] = LINE_WIDTH

    if len(sys.argv) < 2:
        print('USAGE: python analyze-log.py <path to log file> [gpr|1d|easy] [shift|alt|dist|lat|orient]')
        sys.exit()

    mode = sys.argv[2]
    measure = 'std'
    if len(sys.argv) > 3:
        sc = 1
        if sys.argv[3] == 'shift':
            target = 'rel shift error (m/km)'
        elif sys.argv[3] == 'alt':
            target = 'altitude error'
            sc = 1000
        elif sys.argv[3] == 'dist':
            target = 'dist error (m/km)'
        elif sys.argv[3] == 'lat':
            target = 'lat error (m/km)'
        elif sys.argv[3] == 'orient':
            target = 'rot error'
        else:
            assert False, 'unknown target: %s' % sys.argv[3]

        if 'prct' in sys.argv[3:]:
            measure = 'p99.73'

    else:
        target = 'rel shift error (m/km)'  # 'shift error km' #if not one_d_only else 'dist error'

    predictors = (
        'sol elong',  # solar elongation
        'total dev angle',  # total angle between initial estimate and actual relative orientation
        'distance',  # distance of object
        'visible',  # esimate of % visible because of camera view edge
    )
    predictor_labels = (
        'Phase Angle (deg)',
        'Initial orientation error (deg)',
        'Distance (km)',
        'In camera view (%)',
    )

    data = []
    system_models = {}
    for logfile in sys.argv[1].split(" "):
        mission = logfile.split('-')[0]
        sm = get_system_model(mission)
        system_models[mission] = sm

        # read data
        X, Y, yc, labels = read_data(sm, os.path.join(LOG_DIR, logfile), predictors, [target])
        #X[:, 1] = np.abs(tools.wrap_degs(X[:, 1]))
        data.append((logfile, X, yc, Y.flatten(), labels))

    title_map = {
        'didy2w': 'D2, WAC',
        'didy2n': 'D2, NAC',
        'didy1w': 'D1, WAC',
        'didy1n': 'D1, NAC',
    }

    if mode in ('1d', 'easy'):
        n_groups = 6
        # yr = yr/1000
        # idxs = (0, 1, 2, 3)
        idxs = (2,)
        for idx in idxs:
            fig, axs = plt.subplots(len(data), 1, figsize=FIG_SIZE, sharex=True)
            for i, (logfile, X, yc, yr, labels) in enumerate(data):
                if mode == 'easy':
                    q997 = np.percentile(np.abs(yr), 99.73)
                    tmp = tuple((X[:, k] >= EASY_LIMITS[k][0], X[:, k] <= EASY_LIMITS[k][1]) for k in idxs if k != idx)

                    # concatenate above & take logical and, also remove worst 0.3%
                    I = np.logical_and.reduce(
                        sum(tmp, ()) + (np.logical_or(np.abs(yr) < q997, yr == FAIL_ERRS[target]),))
                else:
                    I = np.ones((X.shape[0],), dtype='bool')

                xmin, xmax = np.min(X[I, idx]), np.max(X[I, idx])
                ax = axs[i] if len(data) > 1 else axs
                line, = ax.plot(X[I, idx], yr[I], 'x')

                if n_groups:
                    # calc means and stds in bins

                    # x = [1/v for v in np.linspace(1/xmin, 1/xmax, n_groups+1)]
                    x = np.linspace(xmin, xmax, n_groups + 1)
                    y_grouped = [yr[np.logical_and.reduce((
                        I,
                        np.logical_not(yc),
                        X[:, idx] > x[i],
                        X[:, idx] < x[i + 1],
                    ))] for i in range(n_groups)]
                    # means = [np.percentile(yg, 50) for yg in y_grouped]
                    means = np.array([np.mean(yg) for yg in y_grouped])
                    # stds = np.subtract([np.percentile(yg, 68) for yg in y_grouped], means)
                    stds = np.array([np.std(yg) for yg in y_grouped])
                    x = x.reshape((-1, 1))
                    stds = stds.reshape((-1, 1))
                    means = means.reshape((-1, 1))
                    xstep = np.concatenate((x, x), axis=1).flatten()[1:-1]
                    sstep = np.concatenate((stds, stds), axis=1).flatten()
                    mstep = np.concatenate((means, means), axis=1).flatten()
                    ax.plot(xstep, sstep, '-')
                    ax.plot(xstep, mstep, '-')
                    # bar_width = (xmax - xmin)/n_groups * 0.2
                    # rects1 = ax.bar((x[1:] + x[:-1]) * 0.5, stds, width=bar_width, bottom=means-stds/2,
                    #                 alpha=0.4, color='b', yerr=stds, error_kw={'ecolor': '0.3'}, label='error')

                else:
                    # filtered means, stds
                    xt = np.linspace(xmin, xmax, 100)

                    if False:
                        # exponential weight
                        weight_fun = lambda d: 0.01 ** abs(d / (xmax - xmin))
                    else:
                        # gaussian weight
                        from scipy.stats import norm
                        from scipy.interpolate import interp1d
                        interp = interp1d(xt - xmin, norm.pdf(xt - xmin, 0, (xmax - xmin) / 10))
                        weight_fun = lambda d: interp(abs(d))

                    if False:
                        # use smoothed mean for std calc
                        yma = tools.smooth1d(X[I, idx], X[I, idx], yr[I], weight_fun)
                    else:
                        # use global mean for std calc (fast)
                        yma = np.mean(yr[I])

                    ym = tools.smooth1d(xt, X[I, idx], yr[I], weight_fun)
                    ystd = tools.smooth1d(xt, X[I, idx], (yr[I] - yma) ** 2, weight_fun) ** (1 / 2)

                    ax.plot(xt, ym, '-')
                    ax.plot(xt, ystd, '-')

                # ax.set_title('%s: %s by %s' % (logfile, target, predictor_labels[idx]))
                ax.set_title('%s' % title_map[logfile.split('-')[0]])
                if i == len(data)-1:
                    ax.set_xlabel(predictor_labels[idx])
                ax.set_ylabel(target)
                ax.set_yticks(range(-200, 201, 50))
                ax.hlines(range(-200, 201, 10), xmin, xmax, '0.95', '--')
                ax.hlines(range(-200, 201, 50), xmin, xmax, '0.7', '-')
                plt.setp(ax.get_xticklabels(), rotation=45)
#                plt.setp(ax.get_yticklabels())
                tools.hover_annotate(fig, ax, line, np.array(labels)[I])

                # ax.set_xticks((x[1:] + x[:-1]) * 0.5)
                # ax.set_xticklabels(['%.2f-%.2f' % (x[i], x[i+1]) for i in range(n_groups)])
                # ax.legend()

                # operation zones for didymos mission
                if mission[:4] == 'didy' and idx == 2:
                    ax.set_xticks(np.arange(0.1, 10.5, 0.2))
                    if i == 0:
                        ax.axvspan(1.1, 1.3, facecolor='cyan', alpha=0.3)
                        ax.axvspan(3.8, 4.2, facecolor='orange', alpha=0.3)
                    elif i == 1:
                        ax.axvspan(0.15, 0.3, facecolor='pink', alpha=0.5)
                        ax.axvspan(1.1, 1.3, facecolor='cyan', alpha=0.3)
                    elif i == 2:
                        ax.axvspan(3.8, 4.2, facecolor='orange', alpha=0.3)
                    elif i == 3:
                        ax.axvspan(1.1, 1.3, facecolor='cyan', alpha=0.3)
                        ax.axvspan(2.8, 5.2, facecolor='orange', alpha=0.3)

            plt.tight_layout()
            plt.subplots_adjust(top=0.94, hspace=0.35)
            while (plt.waitforbuttonpress() == False):
                pass

    elif mode == '2d':

        scatter = False

        # 0: solar elong
        # 1: initial deviation angle
        # 2: distance
        # 3: ratio in view
        idxs = tuple(range(4))
        pairs = (
            (2, 0),
            #    (1, 3),
            #    (2, 3),
            #    (0, 1),
        )

        # titles = ['ORB', 'AKAZE', 'SURF', 'SIFT']
        # titles = [d[0][:-4] for d in data]
        titles = [title_map[d[0].split('-')[0]] for d in data]

        nd = len(data)
        r, c = {
            1: (1, 1),
            2: (1, 2),
            3: (3, 1),
            4: (2, 2),
        }[nd]
        if scatter:
            fig, axs = plt.subplots(r, c * len(pairs), figsize=FIG_SIZE)
        else:
            from mpl_toolkits.mplot3d import Axes3D
            from matplotlib.colors import Normalize
            fig = plt.figure(figsize=FIG_SIZE)
            fig2 = plt.figure(figsize=FIG_SIZE)

        for j, (logfile, X, yc, yr, labels) in enumerate(data):
            # samples belonging to operational/easy domain
            mission = logfile.split('-')[0]
            sm = system_models[mission]
            EASY_LIMITS[predictors.index('distance')] = (sm.min_distance, sm.max_distance)
            E = np.logical_and.reduce(sum(tuple(
                (X[:, k] >= EASY_LIMITS[k][0], X[:, k] <= EASY_LIMITS[k][1]) for k in idxs
            ), ()))
            print('%s: overall 99.73%% perf: %.3f m/km (n=%d)' % (mission,
                  np.percentile(yr[np.logical_and(E, np.logical_not(yc))], 99.73),
                  np.sum(np.logical_and(E, np.logical_not(yc)))))

            for i, (i0, i1) in enumerate(pairs):
                if scatter:
                    tmp = tuple(
                        (X[:, k] >= EASY_LIMITS[k][0], X[:, k] <= EASY_LIMITS[k][1]) for k in idxs if k not in (i0, i1))
                    I = np.logical_and.reduce(sum(tmp, ()))
                else:
                    I = np.ones((X.shape[0],), dtype='bool')

                # add some offset if ratio in view is one so that they dont all stack in same place
                offsets = (X[I, 3] == 1) * np.random.uniform(0, 0.2, (np.sum(I),))
                off0 = 0 if i0 != 3 else offsets
                off1 = 0 if i1 != 3 else offsets

                if scatter:
                    ax = axs.flatten()[j * len(pairs) + i]
                    line = ax.scatter(X[I, i0] + off0, X[I, i1] + off1, s=60, c=yc[I], cmap=plt.cm.Paired,
                                      alpha=0.5)  # edgecolors=(0, 0, 0))
                    tools.hover_annotate(fig, ax, line, np.array(labels)[I])
                else:
                    ax = fig.add_subplot(r, c * len(pairs), j * len(pairs) + i + 1, projection='3d')
                    ax2 = fig2.add_subplot(r, c * len(pairs), j * len(pairs) + i + 1, projection='3d')

                    xmin, xmax = np.min(X[I, i0]), np.max(X[I, i0])
                    ymin, ymax = np.min(X[I, i1]), np.max(X[I, i1])
                    x = np.linspace(xmin, xmax, 7)
                    y = np.linspace(ymin, ymax, 7) if i1 != 0 else np.array([0, 22.5, 45, 67.5, 90, 112.5, 135])
                    xx, yy = np.meshgrid(x, y)

                    y_grouped = [[yr[np.logical_and.reduce((
                        I,
                        np.logical_not(yc),
                        X[:, i0] > x[i],
                        X[:, i0] < x[i + 1],
                        X[:, i1] > y[j],
                        X[:, i1] < y[j + 1],
                    ))] for i in range(len(x) - 1)] for j in range(len(y) - 1)]

                    # std when we assume zero mean, remove lowest 0.1% and highest 0.1% before calculating stats
                    stds = np.array(
                        [[np.sqrt(tools.robust_mean(y_grouped[j][i]**2, 0.1)) for i in range(len(x) - 1)] for j in range(len(y) - 1)])
                    samples = np.array([[len(y_grouped[j][i]) for i in range(len(x) - 1)] for j in range(len(y) - 1)])

                    d_coefs, pa_coefs, mod_stds = model_stds2(stds, samples)
                    R2 = (1 - np.sum((stds - mod_stds)**2 * samples) / np.sum(stds**2 * samples)) * 100

                    print_model(titles[j], x, d_coefs, y, pa_coefs, R2)

                    xstep = np.kron(xx, np.ones((2, 2)))[1:-1, 1:-1]
                    ystep = np.kron(yy, np.ones((2, 2)))[1:-1, 1:-1]
                    # mstep = np.kron(means, np.ones((2, 2)))
                    sstep = np.kron(stds, np.ones((2, 2)))
                    msstep = np.kron(mod_stds, np.ones((2, 2)))

                    scalarMap = plt.cm.ScalarMappable(norm=Normalize(vmin=np.min(sstep), vmax=np.max(sstep)), cmap=plt.cm.PuOr_r)
                    ax.plot_surface(xstep, ystep, sstep, facecolors=scalarMap.to_rgba(sstep), antialiased=True)
                    ax.view_init(30, -60)

                    ax2.plot_surface(xstep, ystep, msstep, facecolors=scalarMap.to_rgba(msstep), antialiased=True)
                    ax2.view_init(30, -60)

                # ax.tick_params(labelsize=18)
                ax.set_xlabel(predictor_labels[i0])
                ax.set_ylabel(predictor_labels[i1])
                ax2.set_xlabel(predictor_labels[i0])
                ax2.set_ylabel(predictor_labels[i1])

                if i == 0:
                    col, row = j % c, j // c
                    fig.text(0.36 + col * 0.5, 0.96 - row * 0.5, titles[j], horizontalalignment='center')
                    fig2.text(0.36 + col * 0.5, 0.96 - row * 0.5, titles[j]+' (R2=%.1f%%)'%R2, horizontalalignment='center')
                # ax.set_xbound(xmin, xmax)
                # ax.set_ybound(ymin, ymax)

        plt.tight_layout()
        plt.subplots_adjust(top=0.94, hspace=0.3, wspace=0.25)
        plt.show()

    elif mode == 'gpr':
        logfile, X, yc, yr, labels = data[0]

        pairs = (
            (0, 1),
            (0, 2),
            (1, 2),
            #        (0,3),(1,3),(2,3),
        )
        for pair in pairs:
            xmin, xmax = np.min(X[:, pair[0]]), np.max(X[:, pair[0]])
            ymin, ymax = np.min(X[:, pair[1]]), np.max(X[:, pair[1]])
            xx, yy = np.meshgrid(np.linspace(xmin, xmax, 50), np.linspace(ymin, ymax, 50))

            kernel = 0.01 * RBF(length_scale=((xmax - xmin) * 2, (ymax - ymin) * 2))
            if False:
                y = yc
                # fit hyper parameters
                kernel += 0.1 * WhiteKernel(noise_level=0.001)
                gpc = GaussianProcessClassifier(kernel=kernel, warm_start=True).fit(X[:, pair], yc)
                # hyper parameter results
                res = gpc.kernel_, gpc.log_marginal_likelihood(gpc.kernel_.theta)
                # classify on each grid point
                P = gpc.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
            else:
                y = yr
                # fit hyper parameters
                kernel += 4.0 * WhiteKernel(noise_level=4.0)
                gpr = GaussianProcessRegressor(kernel=kernel, alpha=0, normalize_y=True).fit(X[:, pair], yr)
                # hyper parameter results
                res = gpr.kernel_, gpr.log_marginal_likelihood(gpr.kernel_.theta)
                # regress on each grid point
                P = gpr.predict(np.vstack((xx.ravel(), yy.ravel())).T)

            P = P.reshape(xx.shape)

            # plot classifier output
            fig = plt.figure(figsize=FIG_SIZE)
            if True:
                print('%s' % ((np.min(P), np.max(P), np.min(y), np.max(y)),))
                image = plt.imshow(P, interpolation='nearest', extent=(xmin, xmax, ymin, ymax),
                                   aspect='auto', origin='lower', cmap=plt.cm.PuOr_r)
                plt.scatter(X[:, pair[0]], X[:, pair[1]], s=30, c=y, cmap=plt.cm.Paired, edgecolors=(0, 0, 0))
                cb = plt.colorbar(image)
                ax = fig.gca()
            else:
                from mpl_toolkits.mplot3d import Axes3D
                from matplotlib.colors import Normalize

                ax = fig.gca(projection='3d')
                scalarMap = plt.cm.ScalarMappable(norm=Normalize(vmin=np.min(P), vmax=np.max(P)),
                                                  cmap=plt.cm.PuOr_r)
                ax.plot_surface(xx, yy, P, rstride=1, cstride=1, facecolors=scalarMap.to_rgba(P), antialiased=True)

            # cb.ax.tick_params(labelsize=18)
            # ax.tick_params(labelsize=18)
            plt.xlabel(predictors[pair[0]])
            plt.ylabel(predictors[pair[1]])
            plt.axis([xmin, xmax, ymin, ymax])
            # plt.title("%s\n Log-Marginal-Likelihood:%.3f" % res, fontsize=12)
            plt.tight_layout()
            plt.show()

    elif mode == '3d':
        from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

        logfile, X, yc, yr, labels = data[0]
        xmin, xmax = np.min(X[:, 0]), np.max(X[:, 0])
        ymin, ymax = np.min(X[:, 1]), np.max(X[:, 1])
        zmin, zmax = np.min(X[:, 2]), np.max(X[:, 2])

        fig = plt.figure(figsize=FIG_SIZE)
        ax = fig.add_subplot(111, projection='3d')
        ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=yr, cmap=plt.cm.Paired, edgecolors=(0, 0, 0))

        #        cb = plt.colorbar(image)
        #        cb.ax.tick_params(labelsize=18)
        # ax.tick_params(labelsize=18)
        ax.set_xlabel(predictors[0])
        ax.set_ylabel(predictors[1])
        ax.set_zlabel(predictors[2])
        ax.set_xbound(xmin, xmax)
        ax.set_ybound(ymin, ymax)
        ax.set_zbound(zmin, zmax)

        plt.tight_layout()
        plt.show()
    else:
        assert False, 'wrong mode'
Пример #16
0
    clf = GaussianProcessClassifier(kernel=kernel, warm_start=True).fit(X, Y)

    # plot the decision function for each datapoint on the grid
    Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]
    Z = Z.reshape(xx.shape)

    plt.subplot(1, 2, i + 1)
    image = plt.imshow(Z,
                       interpolation='nearest',
                       extent=(xx.min(), xx.max(), yy.min(), yy.max()),
                       aspect='auto',
                       origin='lower',
                       cmap=plt.cm.PuOr_r)
    contours = plt.contour(xx, yy, Z, levels=[0.5], linewidths=2, colors=['k'])
    plt.scatter(X[:, 0],
                X[:, 1],
                s=30,
                c=Y,
                cmap=plt.cm.Paired,
                edgecolors=(0, 0, 0))
    plt.xticks(())
    plt.yticks(())
    plt.axis([-3, 3, -3, 3])
    plt.colorbar(image)
    plt.title("%s\n Log-Marginal-Likelihood:%.3f" %
              (clf.kernel_, clf.log_marginal_likelihood(clf.kernel_.theta)),
              fontsize=12)

plt.tight_layout()
plt.show()
# Generate data
train_size = 50
rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 100)[:, np.newaxis]
y = np.array(X[:, 0] > 2.5, dtype=int)

# Specify Gaussian Processes with fixed and optimized hyperparameters
gp_fix = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0),
                                   optimizer=None)
gp_fix.fit(X[:train_size], y[:train_size])

gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0))
gp_opt.fit(X[:train_size], y[:train_size])

print("Log Marginal Likelihood (initial): %.3f" %
      gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
print("Log Marginal Likelihood (optimized): %.3f" %
      gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))

print("Accuracy: %.3f (initial) %.3f (optimized)" %
      (accuracy_score(y[:train_size], gp_fix.predict(X[:train_size])),
       accuracy_score(y[:train_size], gp_opt.predict(X[:train_size]))))
print("Log-loss: %.3f (initial) %.3f (optimized)" %
      (log_loss(y[:train_size],
                gp_fix.predict_proba(X[:train_size])[:, 1]),
       log_loss(y[:train_size],
                gp_opt.predict_proba(X[:train_size])[:, 1])))

# Plot posteriors
plt.figure()
plt.scatter(X[:train_size, 0],
Пример #18
0
def test_lml_precomputed():
    # Test that lml of optimized kernel is stored correctly.
    for kernel in kernels:
        gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
        assert_almost_equal(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                            gpc.log_marginal_likelihood(), 7)
Пример #19
0
    elif 2 < pts[0] < 3 and 0 < pts[1] < 1:
        training_Y.append(1)
    elif 4 < pts[0] < 5 and 2 < pts[1] < 3:
        training_Y.append(1)
    else:
        training_Y.append(0)

# for idx, pt in enumerate(training_X):
# print("vertex ({},{}), the occupancy is {}".format(pt[0],pt[1],training_Y[idx]))

# Specify Gaussian Processes with fixed and optimized hyperparameters
gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1))
gp_opt.fit(training_X, training_Y)
print("The trained hyperparameter are {}".format((gp_opt.kernel_.theta)))
print("Log Marginal Likelihood (optimized): %.3f" %
      gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))

# # Plot posteriors
# plt.figure(0)
# plt.scatter(X[:train_size][0], X[:train_size][1],y[:train_size], c='k', label="Train data",
#             edgecolors=(0, 0, 0))
# plt.scatter(X[train_size:][0], X[train_size:][1],y[train_size:], c='g', label="Test data",
#             edgecolors=(0, 0, 0))
# X1_ = np.linspace(1, 5, 5)
# X2_ = np.linspace(1, 5, 5)
# # print(X1_)
#
# X_ = np.asanyarray([[row,col] for row in X1_ for col in X2_])
#
#
#
Пример #20
0
# Generate data
train_size = 50
rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 100)[:, np.newaxis]
y = np.array(X[:, 0] > 2.5, dtype=int)

# Specify Gaussian Processes with fixed and optimized hyperparameters
gp_fix = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0),
                                   optimizer=None)
gp_fix.fit(X[:train_size], y[:train_size])

gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0))
gp_opt.fit(X[:train_size], y[:train_size])

print("Log Marginal Likelihood (initial): %.3f"
      % gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
print("Log Marginal Likelihood (optimized): %.3f"
      % gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))

print("Accuracy: %.3f (initial) %.3f (optimized)"
      % (accuracy_score(y[:train_size], gp_fix.predict(X[:train_size])),
         accuracy_score(y[:train_size], gp_opt.predict(X[:train_size]))))
print("Log-loss: %.3f (initial) %.3f (optimized)"
      % (log_loss(y[:train_size], gp_fix.predict_proba(X[:train_size])[:, 1]),
         log_loss(y[:train_size], gp_opt.predict_proba(X[:train_size])[:, 1])))


# Plot posteriors
plt.figure(0)
plt.scatter(X[:train_size, 0], y[:train_size], c='k', label="Train data",
            edgecolors=(0, 0, 0))
Пример #21
0
def test_lml_precomputed(kernel):
    # Test that lml of optimized kernel is stored correctly.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
    assert_almost_equal(
        gpc.log_marginal_likelihood(gpc.kernel_.theta), gpc.log_marginal_likelihood(), 7
    )
Пример #22
0
def plot(df, options):

    UNIQ_GROUPS = df.group.unique()
    UNIQ_GROUPS.sort()

    sns.set_style("white")
    grppal = sns.color_palette("Set2", len(UNIQ_GROUPS))

    print '# UNIQ GROUPS', UNIQ_GROUPS

    cent_stats = df.groupby(
        ['position', 'group', 'side']).apply(stats_per_group)
    cent_stats.reset_index(inplace=True)

    import time
    from sklearn import preprocessing
    from sklearn.gaussian_process import GaussianProcessRegressor, GaussianProcessClassifier
    from sklearn.gaussian_process.kernels import Matern, WhiteKernel, ExpSineSquared, ConstantKernel, RBF


    ctlDF = cent_stats[ cent_stats['group'] == 0 ]

    TNRightDF = cent_stats[ cent_stats['group'] != 0]
    TNRightDF = TNRightDF[TNRightDF['side'] == 'right']

    dataDf = pd.concat([ctlDF, TNRightDF], ignore_index=True)
    print dataDf

    yDf = dataDf['group'] == 0
    yDf = yDf.astype(int)
    y = yDf.values
    print y
    print y.shape

    XDf = dataDf[['position', 'values']]
    X = XDf.values
    X = preprocessing.scale(X)
    print X
    print X.shape
    

    # kernel = ConstantKernel() + Matern(length_scale=mean, nu=3 / 2) + \
    # WhiteKernel(noise_level=1e-10)
    
    kernel = 1**2 * Matern(length_scale=1, nu=1.5) + \
        WhiteKernel(noise_level=0.1)

    figure = plt.figure(figsize=(10, 6))


    stime = time.time()
    gp = GaussianProcessClassifier(kernel)
    gp.fit(X, y)

    print gp.kernel_
    print gp.log_marginal_likelihood()

    print("Time for GPR fitting: %.3f" % (time.time() - stime))


    # create a mesh to plot in
    h = 0.1
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                        np.arange(y_min, y_max, h))

    plt.figure(figsize=(10, 5))
    
    # Plot the predicted probabilities. For that, we will assign a color to
    # each point in the mesh [x_min, m_max]x[y_min, y_max].

    Z = gp.predict_proba(np.c_[xx.ravel(), yy.ravel()])
    Z = Z[:,1]
    print Z
    print Z.shape
    # Put the result into a color plot
    Z = Z.reshape((xx.shape[0], xx.shape[1]))
    print Z.shape
    plt.imshow(Z, extent=(x_min, x_max, y_min, y_max), origin="lower")

    # Plot also the training points
    plt.scatter(X[:, 0], X[:, 1], c=np.array(["r", "g"])[y])
    plt.xlabel('position')
    plt.ylabel('normalized val')
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())
    plt.yticks(())
    plt.title("%s, LML: %.3f" %
            ("TN vs. Control", gp.log_marginal_likelihood(gp.kernel_.theta)))

    plt.tight_layout()


    if options.title:
        plt.suptitle(options.title)

    if options.output:
        plt.savefig(options.output, dpi=150)

    if options.is_show:
        plt.show()
Пример #23
0

# Generate data
train_size = 50
rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 100)[:, np.newaxis]
y = np.array(X[:, 0] > 2.5, dtype=int)

# Specify Gaussian Processes with fixed and optimized hyperparameters
gp_fix = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0), optimizer=None)
gp_fix.fit(X[:train_size], y[:train_size])

gp_opt = GaussianProcessClassifier(kernel=1.0 * RBF(length_scale=1.0))
gp_opt.fit(X[:train_size], y[:train_size])

print("Log Marginal Likelihood (initial): %.3f" % gp_fix.log_marginal_likelihood(gp_fix.kernel_.theta))
print("Log Marginal Likelihood (optimized): %.3f" % gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))

print(
    "Accuracy: %.3f (initial) %.3f (optimized)"
    % (
        accuracy_score(y[:train_size], gp_fix.predict(X[:train_size])),
        accuracy_score(y[:train_size], gp_opt.predict(X[:train_size])),
    )
)
print(
    "Log-loss: %.3f (initial) %.3f (optimized)"
    % (
        log_loss(y[:train_size], gp_fix.predict_proba(X[:train_size])[:, 1]),
        log_loss(y[:train_size], gp_opt.predict_proba(X[:train_size])[:, 1]),
    )
Пример #24
0
            xmin, xmax = np.min(X[:, pair[0]]), np.max(X[:, pair[0]])
            ymin, ymax = np.min(X[:, pair[1]]), np.max(X[:, pair[1]])
            xx, yy = np.meshgrid(np.linspace(xmin, xmax, 50),
                                 np.linspace(ymin, ymax, 50))

            kernel = 0.01 * RBF(length_scale=((xmax - xmin) * 2,
                                              (ymax - ymin) * 2))
            if False:
                y = yc
                # fit hyper parameters
                kernel += 0.1 * WhiteKernel(noise_level=0.001)
                gpc = GaussianProcessClassifier(kernel=kernel,
                                                warm_start=True).fit(
                                                    X[:, pair], yc)
                # hyper parameter results
                res = gpc.kernel_, gpc.log_marginal_likelihood(
                    gpc.kernel_.theta)
                # classify on each grid point
                P = gpc.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:,
                                                                             1]
            else:
                y = yr
                # fit hyper parameters
                kernel += 4.0 * WhiteKernel(noise_level=4.0)
                gpr = GaussianProcessRegressor(kernel=kernel,
                                               alpha=0,
                                               normalize_y=True).fit(
                                                   X[:, pair], yr)
                # hyper parameter results
                res = gpr.kernel_, gpr.log_marginal_likelihood(
                    gpr.kernel_.theta)
                # regress on each grid point
Пример #25
0
def test_lml_improving(kernel):
    # Test that hyperparameter-tuning improves log-marginal likelihood.
    gpc = GaussianProcessClassifier(kernel=kernel).fit(X, y)
    assert_greater(gpc.log_marginal_likelihood(gpc.kernel_.theta),
                   gpc.log_marginal_likelihood(kernel.theta))
Пример #26
0
class GPR_kernelfit(object):
    '''
    Class that is used for fitting Gaussian Kernels.
    This uses an implementation from Scikit that uses the 
    Laplace approximation to expand around the posterior
    '''

    X = []  # x-data
    y = []  # y-data
    kernel = 0.1 * RBF([25.0])  # Implicitly sets the initial values
    fit = 0

    def __init__(self, x, y, kernel=0):
        '''
        Constructor
        '''
        self.X = x
        self.y = y
        if kernel != 0:
            self.kernel = kernel

    def run_fit(self):
        '''Runs a fit for the Gaussian Process Classifier'''
        print("Starting Run...")
        print(self.X)
        print(self.y)
        start = time()
        self.fit = GaussianProcessClassifier(kernel=self.kernel).fit(
            self.X, self.y)
        print("Run time: %.4f" % (time() - start))
        print("Theta-Estimates: ")
        print(self.fit.kernel_)
        print(self.fit.kernel_.theta)
        print("Finished Run!!")

    def show_fit(self):
        '''Visualizes the fit'''
        # create a mesh to plot in
        h = 5
        x_min, x_max = self.X[:, 0].min() - 1, self.X[:, 0].max() + 1
        y_min, y_max = self.X[:, 1].min() - 1, self.X[:, 1].max() + 1
        xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                             np.arange(y_min, y_max, h))

        # Put the result into a color plot
        Z = self.fit.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
        Z = Z.reshape(xx.shape)

        plt.figure()
        plt.imshow(Z, extent=(x_min, x_max, y_min, y_max), origin="lower")
        image = plt.imshow(Z,
                           interpolation='nearest',
                           extent=(xx.min(), xx.max(), yy.min(), yy.max()),
                           aspect='auto',
                           origin='lower',
                           cmap=plt.cm.PuOr_r)  # @UndefinedVariable
        contours = plt.contour(
            xx,
            yy,
            Z,
            levels=[0],
            linewidths=2,  # @UnusedVariable
            linetypes='--')
        plt.colorbar(image)

        # Plot also the training points
        plt.scatter(self.X[:, 0],
                    self.X[:, 1],
                    s=30,
                    c=self.y,
                    cmap=plt.cm.Paired)  # @UndefinedVariable
        plt.xlabel('x-axis')
        plt.ylabel('y-axis')
        plt.xlim(xx.min(), xx.max())
        plt.ylim(yy.min(), yy.max())
        plt.xticks(())
        plt.yticks(())
        plt.title("%s, LML: %.3f" %
                  ("Log Likelihood Surface",
                   self.fit.log_marginal_likelihood(self.fit.kernel_.theta)))

        plt.show()

    def plot_loglike_sf(self):
        '''Plots the log likelihood surface'''
        theta0 = np.logspace(-2, 0, 20)  # Manually set values
        theta1 = np.logspace(0, 2, 20)  # Manually set values
        Theta0, Theta1 = np.meshgrid(theta0, theta1)
        LML = [[
            self.fit.log_marginal_likelihood(
                np.log([Theta0[i, j], Theta1[i, j]]))
            for i in range(Theta0.shape[0])
        ] for j in range(Theta0.shape[1])]
        LML = np.array(LML).T
        plt.plot(np.exp(self.fit.kernel_.theta)[0],
                 np.exp(self.fit.kernel_.theta)[1],
                 'ko',
                 zorder=10)
        plt.plot(np.exp(self.fit.kernel_.theta)[0],
                 np.exp(self.fit.kernel_.theta)[1],
                 'ko',
                 zorder=10)
        plt.pcolor(Theta0, Theta1, LML)
        plt.xscale("log")
        plt.yscale("log")
        plt.colorbar()
        plt.xlabel("Magnitude")
        plt.ylabel("Length-scale")
        plt.title("Log-marginal-likelihood")
        plt.show()
from sklearn.gaussian_process.kernels import Matern


# This file is used to test can GP represent certain occupancy grid map with given sensors position and measurements
x = np.arange(0.5,10.5,1.0)
y = np.arange(0.5,10.5,1.0)

training_X = [[0.5,6.5],[1.5,7.5],[1.5,6.5],[1.5,5.5],[2.5,6.5],[2.5,4.5],[3.5,5.5],[3.5,4.5],[3.5,3.5],[4.5,4.5]]
training_Y = np.array([1,1,1,1,0,0,0,0,1,0])

# Specify Gaussian Processes with fixed and optimized hyperparameters
gp_opt = GaussianProcessClassifier(RBF(length_scale=1.0))
gp_opt.fit(training_X,training_Y)
print("The trained hyperparameter are {}".format((gp_opt.kernel_.theta)))
print("===========================================")
lml,gradient = gp_opt.log_marginal_likelihood(theta=[0.44992595],eval_gradient=True)
print("The log likelihood is {}".format(lml))
print("The gradient is {}".format(gradient))
# print("Log Marginal Likelihood (optimized): %.3f"
#       % gp_opt.log_marginal_likelihood(gp_opt.kernel_.theta))


fig = plt.figure()
ZZ = np.empty([10,10])
for idx1, row in enumerate(x):
    for idx2,col in enumerate(y):
        K = [row,col]
        # print("({},{})".format(row,col))
        # print("({},{})".format(idx1,idx2))
        
        p_occ = gp_opt.predict_proba(np.reshape(K,(-1,2)))[:,1]