Esempio n. 1
0
    def reduce_data(self, mode=1, plot=True):

        print "Reducing data..."

        K = 500
        X = self.D[:, :self.state_dim]

        # Normalize
        # x_max_X = np.max(X, axis=0)
        # x_min_X = np.min(X, axis=0)
        # for i in range(self.state_action_dim):
        #     X[:,i] = (X[:,i]-x_min_X[i])/(x_max_X[i]-x_min_X[i])

        kdt = KDTree(X, leaf_size=20, metric='euclidean')
        df = DiffusionMap(sigma=1, embedding_dim=2, k=K)

        Xreduced = []
        for i in range(X.shape[0]):
            if not (i % 100):
                print i, X.shape[0]

            idx = kdt.query(X[i, :].reshape(1, -1), k=K, return_distance=False)
            X_nn = X[idx, :].reshape(K, self.state_dim)

            V, _ = df.fit_transform(X_nn, density_normalize=False)
            Xreduced.append(V[0, :])

        Xreduced = np.array(Xreduced)

        if plot:
            plt.scatter(Xreduced[:, 0], Xreduced[:, 1])
            plt.show()

        return Xreduced
Esempio n. 2
0
def test_DiffusionMap_get_kernel_matrix_symmetry(mixtureNormals):
    "make sure the kernel matrix is symmetric"
    X = mixtureNormals
    df = DiffusionMap(sigma=1, embedding_dim=2)
    K = df._get_kernel_matrix(X, k=2)

    Q = (K - K.T).toarray()  # np.all doesnt work on sparse matrices
    assert np.all(Q == 0), 'returned kernel matrix is not symmetric'
Esempio n. 3
0
def test_DiffusionMap_fit_transform_eigenvalue_ordering(mixtureNormals):
    "must return the largest first"
    X = mixtureNormals

    embDim = 2
    df = DiffusionMap(sigma=1, embedding_dim=embDim)
    X_embed, lam = df.fit_transform(X)
    assert (lam[0] > lam[1])
Esempio n. 4
0
def test_DiffusionMap_nearestNeighbour_number_of_neighbours(mixtureNormals):
    X = mixtureNormals
    embDim = 2
    df = DiffusionMap(sigma=1, embedding_dim=embDim)

    kNN = 4
    distances, indices = df._get_NN(X, k=kNN)

    assert distances.shape == (X.shape[0], kNN)
    assert indices.shape == (X.shape[0], kNN)
Esempio n. 5
0
def test_DiffusionMap_fit_transform_output_dimensions(mixtureNormals):
    X = mixtureNormals

    embDim = 2
    df = DiffusionMap(sigma=1, embedding_dim=embDim)
    X_embed, lam = df.fit_transform(X)

    assert X_embed.shape == (X.shape[0], embDim), "returns wrong dimensionally"
    assert lam.shape[0] == X_embed.shape[
        1], "must return as many eigenvalues as embedded dimensions"
    def __init__(self):
        # Number of NN
        if useDiffusionMaps:
            dim = 3
            self.K = 1000
            self.K_manifold = 100
            sigma = 2.0
            if diffORspec == 'diff':
                # self.df = DiffusionMap(sigma=sigma, embedding_dim=dim)
                self.df = DiffusionMap(sigma=10, embedding_dim=dim, k=self.K)
                print(
                    '[gp_transition] Using diffusion maps with dimension %d, K: (%d, %d) and sigma=%f.'
                    % (dim, self.K_manifold, self.K, sigma))
            else:
                self.embedding = spectralEmbed(embedding_dim=dim)
                print(
                    '[gp_transition] Using spectral embedding with dimension %d.'
                    % (dim))
            data_load.__init__(self,
                               simORreal=simORreal,
                               discreteORcont=discreteORcont,
                               K=self.K,
                               K_manifold=self.K_manifold,
                               sigma=sigma,
                               dim=dim,
                               dr='diff')
        else:
            self.K = 100
            print('[gp_transition] No diffusion maps used, K=%d.' % self.K)
            data_load.__init__(self,
                               simORreal=simORreal,
                               discreteORcont=discreteORcont,
                               K=self.K,
                               dr='spec')

        svm_failure.__init__(
            self,
            simORreal=simORreal,
            discrete=(True if discreteORcont == 'discrete' else False))
        mean_shift.__init__(self)

        rospy.Service('/gp/transition', batch_transition, self.GetTransition)
        rospy.Service('/gp/transitionOneParticle', one_transition,
                      self.GetTransitionOneParticle)
        rospy.Service('/gp/transitionRepeat', batch_transition_repeat,
                      self.GetTransitionRepeat)
        rospy.Service('/gp/batchSVMcheck', batch_transition,
                      self.batch_svm_check_service)
        rospy.Service('/gp/set_K', setk, self.setK)
        rospy.Service('/gp/set_new_kdtree', setKD, self.setKDtree)
        rospy.init_node('gp_transition', anonymous=True)
        print('[gp_transition] Ready.')

        rospy.spin()
Esempio n. 7
0
def test_DiffusionMap_get_kernel_matrix_number_of_neighbours(mixtureNormals):
    """actually we would like to test for the exact number of neighvours
    but due tot the symmetrizing, it can exceed the kNN"""
    X = mixtureNormals
    embDim = 2
    df = DiffusionMap(sigma=1, embedding_dim=embDim)

    kNN = 4
    K = df._get_kernel_matrix(X, k=kNN)
    assert K.shape == (X.shape[0], X.shape[0])

    nonzero_elements_per_row = np.sum(K.toarray() != 0, 1)
    print(nonzero_elements_per_row)
    assert np.all(
        nonzero_elements_per_row >= kNN
    )  # the number of nonzero elements must be kNN or larger (due to the symmetrizing
    def setK(self, msg):
        V = np.array(msg.data)

        if V[0] < self.state_dim:
            useDiffusionMaps = True
            dim = int(V[0])
            self.K_manifold = int(V[1])
            self.K = int(V[2])
            if diffORspec == 'diff':
                sigma = V[3]
                self.df = DiffusionMap(sigma=sigma, embedding_dim=dim)
                if V[4]:
                    self.dr = 'diff'
                    self.precompute_hyperp(K=self.K,
                                           K_manifold=self.K_manifold,
                                           sigma=sigma,
                                           dim=dim)
                print(
                    '[gp_transition] Using diffusion maps with dimension %d, K: (%d, %d) and sigma=%f.'
                    % (dim, self.K_manifold, self.K, sigma))
            elif diffORspec == 'spec':
                self.embedding = spectralEmbed(embedding_dim=dim)
                if V[4]:
                    self.dr = 'spec'
                    self.precompute_hyperp(K=self.K,
                                           K_manifold=self.K_manifold,
                                           dim=dim)
                print(
                    '[gp_transition] Using spectral embedding with dimension %d.'
                    % (dim))
        else:
            useDiffusionMaps = False
            self.K = int(V[1])
            if V[4]:
                self.precompute_hyperp(K=self.K)
            print('[gp_transition] No diffusion maps used, K=%d.' % self.K)
    def __init__(self):
        svm_failure.__init__(
            self, discrete=(True if discreteORcont == 'discrete' else False))
        data_load.__init__(self,
                           simORreal=simORreal,
                           discreteORcont=discreteORcont)

        # Number of NN
        if useDiffusionMaps:
            self.K = 1000
            self.K_manifold = 100
            self.df = DiffusionMap(sigma=1, embedding_dim=3, k=self.K)
        else:
            self.K = 100

        rospy.Service('/gpup/transition', gpup_transition, self.GetTransition)
        rospy.Service('/gpup/transitionRepeat', gpup_transition_repeat,
                      self.GetTransitionRepeat)
        rospy.init_node('gpup_transition', anonymous=True)
        print('[gpup_transition] Ready.')

        rate = rospy.Rate(15)  # 15hz
        while not rospy.is_shutdown():
            rospy.spin()
import gpflow
import time
from scipy.io import loadmat
import pickle
import math
from diffusionMaps import DiffusionMap

saved = False

discrete = True
useDiffusionMaps = True

# Number of NN
if useDiffusionMaps:
    K = 5000
    df = DiffusionMap(sigma=1, embedding_dim=3, k=K)
else:
    K = 100

print('Loading data...')
if discrete:
    Q = loadmat('../../data/sim_data_discrete.mat')
    Qtrain = Q['D']
    is_start = Q['is_start'][0][0]
    is_end = Q['is_end'][0][0] - 180
    Qtest = Qtrain[is_start:is_end, :]
    Qtrain = np.concatenate((Qtrain[:is_start, :], Qtrain[is_end:, :]), axis=0)
else:
    Q = loadmat('../../data/sim_data_cont.mat')
    Qtrain = Q['D']
    is_start = Q['is_start'][0][0]
Esempio n. 11
0
def test__get_kernel_matrix_sparse(mixtureNormals):
    df = DiffusionMap(sigma=1, embedding_dim=2)
    K = df._get_kernel_matrix(mixtureNormals, k=10)
    assert issparse(K)