我们从Python开源项目中,提取了以下9个代码示例,用于说明如何使用sklearn.manifold.LocallyLinearEmbedding()。
def do_embedding(self, event=None): converted = self.parent.converted if converted is None: #self.conversion.convert_frames() self.parent.converted = np.load(self.parent.output_folder+'/converted.npy') #FIXME For debugging converted = self.parent.converted method_ind = self.method.currentIndex() print('Doing %s' % self.method.currentText()) if method_ind == 0: self.embedder = manifold.SpectralEmbedding(n_components=4, n_jobs=-1) elif method_ind == 1: self.embedder = manifold.Isomap(n_components=4, n_jobs=-1) elif method_ind == 2: self.embedder = manifold.LocallyLinearEmbedding(n_components=4, n_jobs=-1, n_neighbors=20, method='modified') elif method_ind == 3: self.embedder = manifold.LocallyLinearEmbedding(n_components=4, n_jobs=-1, n_neighbors=20, method='hessian', eigen_solver='dense') elif method_ind == 4: self.embedder = manifold.MDS(n_components=4, n_jobs=-1) elif method_ind == 5: self.embedder = manifold.TSNE(n_components=3, init='pca') self.embedder.fit(converted) self.embed = self.embedder.embedding_ self.embed_plot = self.embed self.gen_hist() self.plot_embedding() if not self.embedded: self.add_classes_frame() self.embedded = True
def test_LocallyLinearEmbedding(*data): ''' test the LLE method :param data: train_data, train_value :return: None ''' X,y=data for n in [4,3,2,1]: lle=manifold.LocallyLinearEmbedding(n_components=n) lle.fit(X) print('reconstruction_error(n_components=%d) : %s'% (n, lle.reconstruction_error_))
def plot_LocallyLinearEmbedding_k(*data): ''' test the performance with different n_neighbors and reduce to 2-D :param data: train_data, train_value :return: None ''' X,y=data Ks=[1,5,25,y.size-1] fig=plt.figure() for i, k in enumerate(Ks): lle=manifold.LocallyLinearEmbedding(n_components=2,n_neighbors=k) X_r=lle.fit_transform(X) ax=fig.add_subplot(2,2,i+1) colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5), (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),) for label ,color in zip( np.unique(y),colors): position=y==label ax.scatter(X_r[position,0],X_r[position,1],label="target= {0}" .format(label),color=color) ax.set_xlabel("X[0]") ax.set_ylabel("X[1]") ax.legend(loc="best") ax.set_title("k={0}".format(k)) plt.suptitle("LocallyLinearEmbedding") plt.show()
def plot_LocallyLinearEmbedding_k_d1(*data): ''' test the performance with different n_neighbors and reduce to 1-D :param data: train_data, train_value :return: None ''' X,y=data Ks=[1,5,25,y.size-1] fig=plt.figure() for i, k in enumerate(Ks): lle=manifold.LocallyLinearEmbedding(n_components=1,n_neighbors=k) X_r=lle.fit_transform(X) ax=fig.add_subplot(2,2,i+1) colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5), (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),) for label ,color in zip( np.unique(y),colors): position=y==label ax.scatter(X_r[position],np.zeros_like(X_r[position]), label="target= {0}".format(label),color=color) ax.set_xlabel("X") ax.set_ylabel("Y") ax.legend(loc="best") ax.set_title("k={0}".format(k)) plt.suptitle("LocallyLinearEmbedding") plt.show()
def test_lle_simple_grid(): # note: ARPACK is numerically unstable, so this test will fail for # some random seeds. We choose 2 because the tests pass. rng = np.random.RandomState(2) # grid of equidistant points in 2D, n_components = n_dim X = np.array(list(product(range(5), repeat=2))) X = X + 1e-10 * rng.uniform(size=X.shape) n_components = 2 clf = manifold.LocallyLinearEmbedding(n_neighbors=5, n_components=n_components, random_state=rng) tol = 0.1 N = barycenter_kneighbors_graph(X, clf.n_neighbors).toarray() reconstruction_error = linalg.norm(np.dot(N, X) - X, 'fro') assert_less(reconstruction_error, tol) for solver in eigen_solvers: clf.set_params(eigen_solver=solver) clf.fit(X) assert_true(clf.embedding_.shape[1] == n_components) reconstruction_error = linalg.norm( np.dot(N, clf.embedding_) - clf.embedding_, 'fro') ** 2 assert_less(reconstruction_error, tol) assert_almost_equal(clf.reconstruction_error_, reconstruction_error, decimal=1) # re-embed a noisy version of X using the transform method noise = rng.randn(*X.shape) / 100 X_reembedded = clf.transform(X + noise) assert_less(linalg.norm(X_reembedded - clf.embedding_), tol)
def test_lle_manifold(): rng = np.random.RandomState(0) # similar test on a slightly more complex manifold X = np.array(list(product(np.arange(18), repeat=2))) X = np.c_[X, X[:, 0] ** 2 / 18] X = X + 1e-10 * rng.uniform(size=X.shape) n_components = 2 for method in ["standard", "hessian", "modified", "ltsa"]: clf = manifold.LocallyLinearEmbedding(n_neighbors=6, n_components=n_components, method=method, random_state=0) tol = 1.5 if method == "standard" else 3 N = barycenter_kneighbors_graph(X, clf.n_neighbors).toarray() reconstruction_error = linalg.norm(np.dot(N, X) - X) assert_less(reconstruction_error, tol) for solver in eigen_solvers: clf.set_params(eigen_solver=solver) clf.fit(X) assert_true(clf.embedding_.shape[1] == n_components) reconstruction_error = linalg.norm( np.dot(N, clf.embedding_) - clf.embedding_, 'fro') ** 2 details = ("solver: %s, method: %s" % (solver, method)) assert_less(reconstruction_error, tol, msg=details) assert_less(np.abs(clf.reconstruction_error_ - reconstruction_error), tol * reconstruction_error, msg=details) # Test the error raised when parameter passed to lle is invalid
def test_lle_init_parameters(): X = np.random.rand(5, 3) clf = manifold.LocallyLinearEmbedding(eigen_solver="error") msg = "unrecognized eigen_solver 'error'" assert_raise_message(ValueError, msg, clf.fit, X) clf = manifold.LocallyLinearEmbedding(method="error") msg = "unrecognized method 'error'" assert_raise_message(ValueError, msg, clf.fit, X)
def test_pipeline(): # check that LocallyLinearEmbedding works fine as a Pipeline # only checks that no error is raised. # TODO check that it actually does something useful from sklearn import pipeline, datasets X, y = datasets.make_blobs(random_state=0) clf = pipeline.Pipeline( [('filter', manifold.LocallyLinearEmbedding(random_state=0)), ('clf', neighbors.KNeighborsClassifier())]) clf.fit(X, y) assert_less(.9, clf.score(X, y)) # Test the error raised when the weight matrix is singular
def visualize_encodings(encodings, file_name=None, grid=None, skip_every=999, fast=False, fig=None, interactive=False): encodings = manual_pca(encodings) if encodings.shape[1] <= 3: return print_data_only(encodings, file_name, fig=fig, interactive=interactive) encodings = encodings[0:720] hessian_euc = dist.squareform(dist.pdist(encodings[0:720], 'euclidean')) hessian_cos = dist.squareform(dist.pdist(encodings[0:720], 'cosine')) grid = (3, 4) if grid is None else grid project_ops = [] n = 2 project_ops.append(("LLE ltsa N:%d" % n, mn.LocallyLinearEmbedding(10, n, method='ltsa'))) project_ops.append(("LLE modified N:%d" % n, mn.LocallyLinearEmbedding(10, n, method='modified'))) project_ops.append(('MDS euclidean N:%d' % n, mn.MDS(n, max_iter=300, n_init=1, dissimilarity='precomputed'))) project_ops.append(("TSNE 30/2000 N:%d" % n, TSNE(perplexity=30, n_components=n, init='pca', n_iter=2000))) n = 3 project_ops.append(("LLE ltsa N:%d" % n, mn.LocallyLinearEmbedding(10, n, method='ltsa'))) project_ops.append(("LLE modified N:%d" % n, mn.LocallyLinearEmbedding(10, n, method='modified'))) project_ops.append(('MDS euclidean N:%d' % n, mn.MDS(n, max_iter=300, n_init=1, dissimilarity='precomputed'))) project_ops.append(('MDS cosine N:%d' % n, mn.MDS(n, max_iter=300, n_init=1, dissimilarity='precomputed'))) plot_places = [] for i in range(12): u, v = int(i / (skip_every - 1)), i % (skip_every - 1) j = v + u * skip_every + 1 plot_places.append(j) fig = get_figure(fig) fig.set_size_inches(fig.get_size_inches()[0] * grid[0] / 1., fig.get_size_inches()[1] * grid[1] / 2.0) for i, (name, manifold) in enumerate(project_ops): is3d = 'N:3' in name try: if is3d: subplot = plt.subplot(grid[0], grid[1], plot_places[i], projection='3d') else: subplot = plt.subplot(grid[0], grid[1], plot_places[i]) data_source = encodings if not _needs_hessian(manifold) else \ (hessian_cos if 'cosine' in name else hessian_euc) projections = manifold.fit_transform(data_source) scatter(subplot, projections, is3d, _build_radial_colors(len(data_source))) subplot.set_title(name) except: print(name, "Unexpected error: ", sys.exc_info()[0], sys.exc_info()[1] if len(sys.exc_info()) > 1 else '') visualize_data_same(encodings, grid=grid, places=plot_places[-4:]) if not interactive: save_fig(file_name, fig) ut.print_time('visualization finished')