

def swiss_roll(optimize=True, verbose=1, plot=True, N=1000, num_inducing=25, Q=4, sigma=0.2):
    import GPy
    from pods.datasets import swiss_roll_generated
    from GPy.models import BayesianGPLVM
    data = swiss_roll_generated(num_samples=N, sigma=sigma)
    Y = data['Y']
    Y -= Y.mean()
    Y /= Y.std()
    t = data['t']
    c = data['colors']
    try:
        from sklearn.manifold.isomap import Isomap
        iso = Isomap().fit(Y)
        X = iso.embedding_
        if (Q > 2):
            X = _np.hstack((X, _np.random.randn(N, (Q - 2))))
    except ImportError:
        X = _np.random.randn(N, Q)
    if plot:
        import matplotlib.pyplot as plt
        from mpl_toolkits.mplot3d import Axes3D
        fig = plt.figure('Swiss Roll Data')
        ax = fig.add_subplot(121, projection='3d')
        ax.scatter(*Y.T, c=c)
        ax.set_title('Swiss Roll')
        ax = fig.add_subplot(122)
        ax.scatter(*X.T[:2], c=c)
        ax.set_title('BGPLVM init')
    var = 0.5
    S = (((var * _np.ones_like(X)) + _np.clip((_np.random.randn(N, Q) * (var ** 2)), (- (1 - var)), (1 - var))) + 0.001)
    Z = _np.random.permutation(X)[:num_inducing]
    kernel = ((GPy.kern.RBF(Q, ARD=True) + GPy.kern.Bias(Q, _np.exp((- 2)))) + GPy.kern.White(Q, _np.exp((- 2))))
    m = BayesianGPLVM(Y, Q, X=X, X_variance=S, num_inducing=num_inducing, Z=Z, kernel=kernel)
    m.data_colors = c
    m.data_t = t
    if optimize:
        m.optimize('bfgs', messages=verbose, max_iters=2000.0)
    if plot:
        fig = plt.figure('fitted')
        ax = fig.add_subplot(111)
        s = m.input_sensitivity().argsort()[::(- 1)][:2]
        ax.scatter(*m.X.mean.T[s], c=c)
    return m

dataset/ETHPy150Open SheffieldML/GPy/GPy/examples/dimensionality_reduction.py swiss_roll/original