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
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])
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]
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 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"