<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.swarma.org/index.php?action=history&amp;feed=atom&amp;title=%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0</id>
	<title>流形学习 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.swarma.org/index.php?action=history&amp;feed=atom&amp;title=%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0"/>
	<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0&amp;action=history"/>
	<updated>2026-11-03T21:17:16Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://wiki.swarma.org/index.php?title=%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0&amp;diff=15511&amp;oldid=prev</id>
		<title>小趣木木：创建页面，内容为“==简介==  本质上，流形学习就是给数据降维的过程。这里假设数据是一个随机样本，采样自一个高维欧氏空间中的流形（manifo…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.swarma.org/index.php?title=%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0&amp;diff=15511&amp;oldid=prev"/>
		<updated>2020-10-16T11:34:46Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“==简介==  本质上，流形学习就是给数据降维的过程。这里假设数据是一个随机样本，采样自一个高维欧氏空间中的流形（manifo…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==简介==&lt;br /&gt;
&lt;br /&gt;
本质上，流形学习就是给数据降维的过程。这里假设数据是一个随机样本，采样自一个高维欧氏空间中的流形（manifold），流形学习的任务就是把这个高维流形映射到一个低维（例如2维）的空间里。流形学习可以分为线性算法和非线性算法，前者包括主成分分析（PCA）和线性判别分析（LDA），后者包括等距映射（Isomap），拉普拉斯特征映射（LE）等。流形学习可以用于特征的降维和提取，为后续的基于特征的分析，如聚类和分类，做铺垫，也可以直接应用于数据可视化等。&lt;br /&gt;
&lt;br /&gt;
==案例：球面映射==&lt;br /&gt;
&lt;br /&gt;
在本案例中，我们使用模拟数据制造一个球面，并将这个3维空间中的流形project到2维上。&lt;br /&gt;
&lt;br /&gt;
[[File:manifoldlearning_figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===调用包===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    from time import time&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    import pylab as pl&lt;br /&gt;
    from mpl_toolkits.mplot3d import Axes3D&lt;br /&gt;
    from matplotlib.ticker import NullFormatter&lt;br /&gt;
    from sklearn import manifold&lt;br /&gt;
    from sklearn.utils import check_random_state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===制造一个三维球面的模拟数据===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    # Variables for manifold learning.&lt;br /&gt;
    n_neighbors = 10&lt;br /&gt;
    n_samples = 1000&lt;br /&gt;
    # Create our sphere.&lt;br /&gt;
    random_state = check_random_state(0)&lt;br /&gt;
    p = random_state.rand(n_samples) * (2 * np.pi - 0.55)&lt;br /&gt;
    t = random_state.rand(n_samples) * np.pi&lt;br /&gt;
    # Sever the poles from the sphere.&lt;br /&gt;
    indices = ((t &amp;lt; (np.pi - (np.pi / 8))) &amp;amp; (t &amp;gt; ((np.pi / 8))))&lt;br /&gt;
    colors = p[indices]&lt;br /&gt;
    x, y, z = np.sin(t[indices]) * np.cos(p[indices]), \&lt;br /&gt;
        np.sin(t[indices]) * np.sin(p[indices]), \&lt;br /&gt;
        np.cos(t[indices])&lt;br /&gt;
    # Plot our dataset.&lt;br /&gt;
    fig = pl.figure(figsize=(15, 8))&lt;br /&gt;
    pl.suptitle(&amp;quot;Manifold Learning with %i points, %i neighbors&amp;quot;&lt;br /&gt;
                % (1000, n_neighbors), fontsize=14)&lt;br /&gt;
    ax = fig.add_subplot(241, projection='3d')&lt;br /&gt;
    ax.scatter(x, y, z, c=p[indices], cmap=pl.cm.rainbow)&lt;br /&gt;
    plt.draw()&lt;br /&gt;
    sphere_data = np.array([x, y, z]).T&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===拟合线性的流形学习模型LLE, LTSA, Hessian LLE, 和Modified LLE===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    # Perform Locally Linear Embedding Manifold learning&lt;br /&gt;
    methods = ['standard', 'ltsa', 'hessian', 'modified']&lt;br /&gt;
    labels = ['LLE', 'LTSA', 'Hessian LLE', 'Modified LLE']&lt;br /&gt;
    for i, method in enumerate(methods):&lt;br /&gt;
        t0 = time()&lt;br /&gt;
        trans_data = manifold\&lt;br /&gt;
            .LocallyLinearEmbedding(n_neighbors, 2,&lt;br /&gt;
                                    method=method).fit_transform(sphere_data).T&lt;br /&gt;
        t1 = time()&lt;br /&gt;
        print(&amp;quot;%s: %.2g sec&amp;quot; % (methods[i], t1 - t0))&lt;br /&gt;
        ax = fig.add_subplot(242 + i)&lt;br /&gt;
        pl.scatter(trans_data[0], trans_data[1], c=colors, cmap=pl.cm.rainbow)&lt;br /&gt;
        pl.title(&amp;quot;%s (%.2g sec)&amp;quot; % (labels[i], t1 - t0))&lt;br /&gt;
        ax.xaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
        ax.yaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
        pl.axis('tight')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===拟合非线性的流形学习模型Isomap，MDS和Spectral Embedding===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    # Perform Isomap Manifold learning.&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    trans_data = manifold.Isomap(n_neighbors, n_components=2)\&lt;br /&gt;
        .fit_transform(sphere_data).T&lt;br /&gt;
    t1 = time()&lt;br /&gt;
    print(&amp;quot;%s: %.2g sec&amp;quot; % ('ISO', t1 - t0))&lt;br /&gt;
    ax = fig.add_subplot(246)&lt;br /&gt;
    pl.scatter(trans_data[0], trans_data[1],  c=colors, cmap=pl.cm.rainbow)&lt;br /&gt;
    pl.title(&amp;quot;%s (%.2g sec)&amp;quot; % ('Isomap', t1 - t0))&lt;br /&gt;
    ax.xaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    ax.yaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    pl.axis('tight')&lt;br /&gt;
&lt;br /&gt;
    # Perform Multi-dimensional scaling.&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    mds = manifold.MDS(2, max_iter=100, n_init=1)&lt;br /&gt;
    trans_data = mds.fit_transform(sphere_data).T&lt;br /&gt;
    t1 = time()&lt;br /&gt;
    print(&amp;quot;MDS: %.2g sec&amp;quot; % (t1 - t0))&lt;br /&gt;
    ax = fig.add_subplot(247)&lt;br /&gt;
    pl.scatter(trans_data[0], trans_data[1],  c=colors, cmap=pl.cm.rainbow)&lt;br /&gt;
    pl.title(&amp;quot;MDS (%.2g sec)&amp;quot; % (t1 - t0))&lt;br /&gt;
    ax.xaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    ax.yaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    pl.axis('tight')&lt;br /&gt;
    &lt;br /&gt;
    # Perform Spectral Embedding.&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    se = manifold.SpectralEmbedding(n_components=2,n_neighbors=n_neighbors)&lt;br /&gt;
    trans_data = se.fit_transform(sphere_data).T&lt;br /&gt;
    t1 = time()&lt;br /&gt;
    print(&amp;quot;Spectral Embedding: %.2g sec&amp;quot; % (t1 - t0))&lt;br /&gt;
    ax = fig.add_subplot(248)&lt;br /&gt;
    pl.scatter(trans_data[0], trans_data[1],  c=colors, cmap=pl.cm.rainbow)&lt;br /&gt;
    pl.title(&amp;quot;Spectral Embedding (%.2g sec)&amp;quot; % (t1 - t0))&lt;br /&gt;
    ax.xaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    ax.yaxis.set_major_formatter(NullFormatter())&lt;br /&gt;
    pl.axis('tight')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==案例：S曲面映射==&lt;br /&gt;
&lt;br /&gt;
[[File:manifoldlearning_figure_2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
===调用包===&lt;br /&gt;
&lt;br /&gt;
除了上一节的包以外还要调用：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    from matplotlib.ticker import NullFormatter&lt;br /&gt;
    from sklearn import manifold, datasets  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===制造一个三维空间中的S流形的模拟数据===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    n_points = 1000&lt;br /&gt;
    X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)&lt;br /&gt;
    n_neighbors = 10&lt;br /&gt;
    n_components = 2&lt;br /&gt;
    fig = pl.figure(figsize=(15, 8))&lt;br /&gt;
    pl.suptitle(&amp;quot;Manifold Learning with %i points, %i neighbors&amp;quot;&lt;br /&gt;
                % (1000, n_neighbors), fontsize=14)&lt;br /&gt;
    ax = fig.add_subplot(241, projection='3d')&lt;br /&gt;
    ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=pl.cm.Spectral)&lt;br /&gt;
    plt.draw()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===拟合各种流形学习模型===&lt;br /&gt;
&lt;br /&gt;
在制造完模拟数据后，剩下的各个拟合与上一节的代码基本一致，只有两个细节需要修改：&lt;br /&gt;
&lt;br /&gt;
原来使用的拟合命令&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    trans_data = mds.fit_transform(sphere_data).T&lt;br /&gt;
    pl.scatter(trans_data[0], trans_data[1],  c=colors, cmap=pl.cm.rainbow)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
需要改成：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;    &lt;br /&gt;
    trans_data = mds.fit_transform(X)&lt;br /&gt;
    pl.scatter(trans_data[:,0], trans_data[:,1],  c=color, cmap=pl.cm.Spectral)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==案例：对手写数字的降维分析==&lt;br /&gt;
&lt;br /&gt;
我们之前已经讨论过手写数字的数据，每个手写的阿拉伯数字被表达为一个8*8的像素矩阵，我们曾经使用每个像素点，也就是64个特征，使用logistic和knn的方法（分类器）去根据训练集判别测试集中的数字。在这种做法中，我们使用了尚未被降维的数据。其实我们还可以使用降维后的数据来训练分类器。现在，就让我们看一下对这个数据集采取各种方式降维的效果。&lt;br /&gt;
&lt;br /&gt;
===引用包和搜集待分析的数据===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_raw_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    from time import time&lt;br /&gt;
    import numpy as np&lt;br /&gt;
    import pylab as pl&lt;br /&gt;
    from matplotlib import offsetbox&lt;br /&gt;
    from sklearn import (manifold, datasets, decomposition, ensemble, lda,&lt;br /&gt;
                         random_projection)&lt;br /&gt;
    &lt;br /&gt;
    digits = datasets.load_digits(n_class=6)&lt;br /&gt;
    X = digits.data&lt;br /&gt;
    y = digits.target&lt;br /&gt;
    n_samples, n_features = X.shape&lt;br /&gt;
    n_neighbors = 30&lt;br /&gt;
    # Plot images of the digits&lt;br /&gt;
    n_img_per_row = 20&lt;br /&gt;
    img = np.zeros((10 * n_img_per_row, 10 * n_img_per_row))&lt;br /&gt;
    for i in range(n_img_per_row):&lt;br /&gt;
        ix = 10 * i + 1&lt;br /&gt;
        for j in range(n_img_per_row):&lt;br /&gt;
            iy = 10 * j + 1&lt;br /&gt;
            img[ix:ix + 8, iy:iy + 8] = X[i * n_img_per_row + j].reshape((8, 8))&lt;br /&gt;
    &lt;br /&gt;
    pl.imshow(img, cmap=pl.cm.binary)&lt;br /&gt;
    pl.xticks([])&lt;br /&gt;
    pl.yticks([])&lt;br /&gt;
    pl.title('digits dataset')&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===定义可视化函数===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    # Scale and visualize the embedding vectors&lt;br /&gt;
    def plot_embedding(X, title=None):&lt;br /&gt;
        x_min, x_max = np.min(X, 0), np.max(X, 0)&lt;br /&gt;
        X = (X - x_min) / (x_max - x_min)&lt;br /&gt;
        pl.figure()&lt;br /&gt;
        ax = pl.subplot(111)&lt;br /&gt;
        for i in range(X.shape[0]):&lt;br /&gt;
            pl.text(X[i, 0], X[i, 1], str(digits.target[i]),&lt;br /&gt;
                    color=pl.cm.Set1(y[i] / 10.),&lt;br /&gt;
                    fontdict={'weight': 'bold', 'size': 9})&lt;br /&gt;
        if hasattr(offsetbox, 'AnnotationBbox'):&lt;br /&gt;
            # only print thumbnails with matplotlib &amp;gt; 1.0&lt;br /&gt;
            shown_images = np.array([[1., 1.]])  # just something big&lt;br /&gt;
            for i in range(digits.data.shape[0]):&lt;br /&gt;
                dist = np.sum((X[i] - shown_images) ** 2, 1)&lt;br /&gt;
                if np.min(dist) &amp;lt; 4e-3:&lt;br /&gt;
                    # don't show points that are too close&lt;br /&gt;
                    continue&lt;br /&gt;
                shown_images = np.r_[shown_images, [X[i]]]&lt;br /&gt;
                imagebox = offsetbox.AnnotationBbox(&lt;br /&gt;
                    offsetbox.OffsetImage(digits.images[i], cmap=pl.cm.gray_r),&lt;br /&gt;
                    X[i])&lt;br /&gt;
                ax.add_artist(imagebox)&lt;br /&gt;
        pl.xticks([]), pl.yticks([])&lt;br /&gt;
        if title is not None:&lt;br /&gt;
            pl.title(title)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
接着，就可以观察比较各种降维方法的效果了：&lt;br /&gt;
&lt;br /&gt;
===随机降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_random_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
把64维数据随机地投影到二维上&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #1.Random 2D projection using a random unitary matrix&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    rp = random_projection.SparseRandomProjection(n_components=2, random_state=42)&lt;br /&gt;
    X_projected = rp.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_projected, &amp;quot;Random Projection (time %.2fs)&amp;quot; % (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PCA降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_PCA_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #2.Projection on to the first 2 principal components&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_pca = decomposition.TruncatedSVD(n_components=2).fit_transform(X)&lt;br /&gt;
    plot_embedding(X_pca, &amp;quot;PCA (time %.2fs)&amp;quot; % (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LDA降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_LDA_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #3.Projection on to the first 2 linear discriminant components&lt;br /&gt;
    X2 = X.copy()&lt;br /&gt;
    X2.flat[::X.shape[1] + 1] += 0.01  # Make X invertible&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_lda = lda.LDA(n_components=2).fit_transform(X2, y)&lt;br /&gt;
    plot_embedding(X_lda,&amp;quot;LDA (time %.2fs)&amp;quot; % (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Isomap降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_isomap_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #4.Isomap projection of the digits dataset&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_iso = manifold.Isomap(n_neighbors, n_components=2).fit_transform(X)&lt;br /&gt;
    plot_embedding(X_iso, &amp;quot;Isomap (time %.2fs)&amp;quot; %  (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LLE降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_LLE_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #4.Locally linear embedding of the digits dataset&lt;br /&gt;
    clf = manifold.LocallyLinearEmbedding(n_neighbors, n_components=2, method='standard')&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_lle = clf.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_lle, &amp;quot;LLE (time %.2fs)&amp;quot; %    (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MLLE降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_MLLE_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #5.Modified Locally linear embedding of the digits dataset&lt;br /&gt;
    clf = manifold.LocallyLinearEmbedding(n_neighbors, n_components=2, method='modified')&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_mlle = clf.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_mlle,  &amp;quot;MLLE (time %.2fs)&amp;quot; %   (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HLLE降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_HLLE_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #6.HLLE embedding of the digits dataset&lt;br /&gt;
    clf = manifold.LocallyLinearEmbedding(n_neighbors, n_components=2, method='hessian')&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_hlle = clf.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_hlle,&amp;quot;HLLE (time %.2fs)&amp;quot; %   (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LTSA降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_LTSA_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #7.LTSA embedding of the digits dataset&lt;br /&gt;
    clf = manifold.LocallyLinearEmbedding(n_neighbors, n_components=2, method='ltsa')&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_ltsa = clf.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_ltsa, &amp;quot;LTSA (time %.2fs)&amp;quot; % (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MDS降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_MDS_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #8.MDS  embedding of the digits dataset&lt;br /&gt;
    clf = manifold.MDS(n_components=2, n_init=1, max_iter=100)&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_mds = clf.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_mds, &amp;quot;MDS embedding of the digits (time %.2fs)&amp;quot; %   (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RTE降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_RTE_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #9. Random Trees embedding of the digits dataset&lt;br /&gt;
    hasher = ensemble.RandomTreesEmbedding(n_estimators=200, random_state=0,   max_depth=5)&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_transformed = hasher.fit_transform(X)&lt;br /&gt;
    pca = decomposition.TruncatedSVD(n_components=2)&lt;br /&gt;
    X_reduced = pca.fit_transform(X_transformed)&lt;br /&gt;
    plot_embedding(X_reduced,  &amp;quot;RTE (time %.2fs)&amp;quot; %   (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SE降维===&lt;br /&gt;
&lt;br /&gt;
[[File:ML_SE_figure.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    #10. Spectral embedding of the digits dataset&lt;br /&gt;
    embedder = manifold.SpectralEmbedding(n_components=2, random_state=0,  eigen_solver=&amp;quot;arpack&amp;quot;)&lt;br /&gt;
    t0 = time()&lt;br /&gt;
    X_se = embedder.fit_transform(X)&lt;br /&gt;
    plot_embedding(X_se,  &amp;quot;SE (time %.2fs)&amp;quot; % (time() - t0))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
总结来说，非线性方法要比线性方法好一些。可以看出手写字体的图像特征是非线性的。&lt;br /&gt;
[[category:旧词条迁移]]&lt;/div&gt;</summary>
		<author><name>小趣木木</name></author>
	</entry>
</feed>