21.md 29.6 KB
Newer Older
L
loopyme 已提交
1
# 2.2. 流形学习
W
init  
wizardforcel 已提交
2 3 4 5 6

校验者:
        [@XuJianzhi](https://github.com/XuJianzhi)
        [@RyanZhiNie](https://github.com/RyanZhiNie)
        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh)
L
loopyme 已提交
7
        [@Loopy](https://github.com/loopyme)
8
        [@barrycg](https://github.com/barrycg)
W
init  
wizardforcel 已提交
9 10 11
翻译者:
        [@XuJianzhi](https://github.com/XuJianzhi)
        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh)
L
loopyme 已提交
12

13 14 15 16 17 18 19 20 21 22
>  Look for the bare necessities

>  The simple bare necessities

>  Forget about your worries and your strife

>  I mean the bare necessitiesOld Mother Nature’s recipes

>  That bring the bare necessities of life

L
loopyme 已提交
23 24 25
>– Baloo的歌 [奇幻森林]

[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_methods_0011.png](img/fe9e5bb155154914f761d6497915e9cb.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_compare_methods.html)
W
init  
wizardforcel 已提交
26

27
流形学习是一种非线性降维方法。其算法基于的思想是:许多数据集维度过高的现象完全是人为导致得。
W
init  
wizardforcel 已提交
28

L
loopyme 已提交
29
## 2.2.1. 介绍
W
init  
wizardforcel 已提交
30

31
高维数据集通常难以可视化。虽然,可以通过绘制两维或三维的数据来显示高维数据的固有结构,但与之等效的高维图不太直观。为了促进高维数据集结构的可视化,必须以某种方式降低维度。
W
init  
wizardforcel 已提交
32

33
通过对数据的随机投影来实现降维是最简单的方法。虽然这样做能实现数据结构一定程度的可视化,但这种随机选择方式仍有许多有待改进之处。在随机投影过程中,数据中更有趣的结构很可能会丢失。
W
init  
wizardforcel 已提交
34

35
**[![digits_img](img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html) [![projected_img](img/015fcf78112c08948e66bb51171ae137.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)**
W
init  
wizardforcel 已提交
36

37
为了解决这一问题,一些监督和无监督的线性降维框架被设计出来,如主成分分析(PCA),独立成分分析以及线性判别分析等。这些算法明确规定了如何来选择数据的“有趣的”线性投影。它们虽然高效,但是经常错失数据中重要的非线性结构。
W
init  
wizardforcel 已提交
38

39
**[![PCA_img](img/93d2f2876517637396e99e36132252f3.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html) [![LDA_img](img/4953c9da8999e3eb76b63a4dd0432896.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)**
W
init  
wizardforcel 已提交
40

41
流形学习可以被认为是将线性框架(如 PCA )推广到对数据中非线性结构敏感的一次尝试。虽然存在监督变量,但是典型的流形学习问题是无监督的:它从数据本身学习数据的高维结构,而不使用预定的分类。
W
init  
wizardforcel 已提交
42

L
loopyme 已提交
43
> **示例**:
片刻小哥哥's avatar
片刻小哥哥 已提交
44 45
>*   参见 [Manifold learning on handwritten digits: Locally Linear Embedding, Isomap…](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html#sphx-glr-auto-examples-manifold-plot-lle-digits-py) ,手写数字降维的示例。
>*   参见 [Comparison of Manifold Learning methods](https://scikit-learn.org/stable/auto_examples/manifold/plot_compare_methods.html#sphx-glr-auto-examples-manifold-plot-compare-methods-py) ,玩具 “S曲线” 数据集降维的示例。
W
init  
wizardforcel 已提交
46 47 48

以下概述了 scikit-learn 中可用的流形学习实现

L
loopyme 已提交
49
## 2.2.2. Isomap
W
init  
wizardforcel 已提交
50

51
流形学习的最早方法之一是 Isomap 算法,等距映射(Isometric Mapping)的缩写。Isomap 可以被视为多维缩放(Multi-dimensional Scaling:MDS)或核主成分分析(Kernel PCA)的扩展。Isomap 寻求一个较低维度的嵌入( _译注:嵌入(embedding),在此处,可以理解为高维数据到低维数据的一种映射转换,数据间的固有结构不变化_ ),它保持了所有点之间的原有的测地距离( _译注:测地距离(geodesic distance)是指在图中连接某两个顶点的最短距离(shortest path)_ )。Isomap 可以通过 [`Isomap`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.Isomap.html#sklearn.manifold.Isomap "sklearn.manifold.Isomap") 对象执行。
W
init  
wizardforcel 已提交
52

53
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0051.png](img/21937e85250a7aaa8aea86e4fbf93452.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
54

L
loopyme 已提交
55
### 2.2.2.1. 复杂度
W
init  
wizardforcel 已提交
56 57 58

Isomap 算法包括三个阶段:

59
1.  **最近邻搜索.** Isomap 使用 [`sklearn.neighbors.BallTree`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 进行有效的近邻搜索。 对于 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 维中 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 个点的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个最近邻,代价约为 ![O[D \log(k) N \log(N)]](img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg)
60 61
2.  **最短路径图搜索.** 该类算法中已知最有效的算法是 Dijkstra 算法或 Floyd-Warshall 算法,其复杂度分别是约 ![O[N^2(k + \log(N))]](img/d459482314974b92f7f44cc36d6eae3e.jpg) 和 ![O[N^3]](img/1a1bc66f06af187108d4250f068748c9.jpg) 。 用户可通过使用 isomap 的 path_method 关键字来选择该算法。 如果未指定,则代码自行尝试为输入数据选择最佳算法。
3.  **部分特征值分解.** 对应于 ![N \times N](img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg) isomap核中 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 个最大特征值的特征向量,进行嵌入编码。 对于密集求解器,代价约为 ![O[d N^2]](img/9642d01a97f06869baba6159e3438677.jpg) 。 通常可以使用 ARPACK 求解器来减少代价。 用户可通过使用 isomap 的 path_method 关键字指定特征求解器。 如果未指定,则代码自行尝试为输入数据选择最佳算法。
W
init  
wizardforcel 已提交
62 63 64 65 66 67 68 69

Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[d N^2]](img/ccd727d4b039d28f8146546bd5f614b3.jpg).

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度

L
loopyme 已提交
70
> **参考资料**:
L
loopyme 已提交
71
>*   [“A global geometric framework for nonlinear dimensionality reduction”](http://science.sciencemag.org/content/290/5500/2319.full) Tenenbaum, J.B.; De Silva, V.; & Langford, J.C. Science 290 (5500)
W
init  
wizardforcel 已提交
72

L
loopyme 已提交
73
## 2.2.3. 局部线性嵌入
W
init  
wizardforcel 已提交
74

75
局部线性嵌入(LLE)通过保留局部邻域内的距离来寻求数据的低维投影。 它可以被认为是一系列的局部主成分分析在全局范围内的相互比较,找到最优的局部非线性嵌入。
W
init  
wizardforcel 已提交
76

77
局部线性嵌入可以使用 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 函数或其面向对象的等效方法 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") 来实现。
W
init  
wizardforcel 已提交
78

79
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0061.png](img/017a1400b81bc9ef956adc43050bb5c8.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
80

L
loopyme 已提交
81
### 2.2.3.1. 复杂度
W
init  
wizardforcel 已提交
82 83 84 85

标准的 LLE 算法包括三个阶段:

1.  **最邻近搜索**. 参见上述 Isomap 讨论。
86
2.  **构造权重矩阵**. ![O[D N k^3]](img/ca22762150e0516b4847c03efd5ebf6d.jpg). LLE 权重矩阵的构造包括每个 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 局部邻域的 ![k \times k](img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg) 线性方程的解。
W
init  
wizardforcel 已提交
87 88 89 90 91 92 93 94 95
3.  **部分特征值分解**. 参见上述 Isomap 讨论。

标准 LLE 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[d N^2]](img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg).

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度

L
loopyme 已提交
96
> **参考资料**:
L
loopyme 已提交
97
>*   [“Nonlinear dimensionality reduction by locally linear embedding”](http://www.sciencemag.org/content/290/5500/2323.full) Roweis, S. & Saul, L. Science 290:2323 (2000)
W
init  
wizardforcel 已提交
98

L
loopyme 已提交
99
## 2.2.4. 改进型局部线性嵌入(MLLE)
W
init  
wizardforcel 已提交
100

101
局部线性嵌入(LLE)的一个众所周知的问题是正则化问题。当 neighbors(邻域)的数量多于输入的维度数量时,定义每个局部邻域的矩阵是不满秩的。为解决这个问题,标准的局部线性嵌入算法使用一个任意正则化参数 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) ,它的取值受局部权重矩阵的迹的影响。虽然我们普遍认为,当正则化参数![r \to 0](img/ab81f225a7e452d651b4888d437d07d2.jpg) ,解向目标嵌入情况收敛,但是当 ![r > 0](img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg)时,并不保证得到最优解。以上说明了,在嵌入过程中的正则化问题会扭曲流形的内部几何形状,使其失真。
W
init  
wizardforcel 已提交
102

103
解决正则化问题的一种方法是对邻域使用多个权重向量。这就是改进型局部线性嵌入(MLLE)算法的精髓。MLLE 可被执行于函数 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") ,或者面向对象的副本 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'modified'` 。它需要满足 `n_neighbors > n_components`
W
init  
wizardforcel 已提交
104

105
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0071.png](img/ca04f56b8f8c29e1eec03620f0f601b0.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
106

L
loopyme 已提交
107
### 2.2.4.1. 复杂度
W
init  
wizardforcel 已提交
108

109
MLLE 算法分为三部分:
W
init  
wizardforcel 已提交
110 111

1.  **近邻搜索**。与标准 LLE 的相同。
112
2.  **权重矩阵构造**。大约是 ![O[D N k^3] + O[N (k-D) k^2]](img/d7f26dee1f8849176f6438863fb775fb.jpg) 。该式第一项恰好等于标准 LLE 算法的复杂度。该式第二项与由多个权重来构造权重矩阵相关。在实践中,构造 MLLE 权重矩阵所增加的损耗(就复杂度而言),比其它两部分要小。
W
init  
wizardforcel 已提交
113 114 115 116 117 118 119 120 121
3.  **部分特征值分解**。与标准 LLE 的相同。

综上,MLLE 的复杂度为 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[N (k-D) k^2] + O[d N^2]](img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg)

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度

L
loopyme 已提交
122
> **参考资料**:
L
loopyme 已提交
123
>*   [“MLLE: Modified Locally Linear Embedding Using Multiple Weights”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.70.382) Zhang, Z. & Wang, J.
W
init  
wizardforcel 已提交
124

L
loopyme 已提交
125
## 2.2.5. 黑塞特征映射(HE)
W
init  
wizardforcel 已提交
126

127
黑塞特征映射 (也称作基于黑塞的 LLE: HLLE )是解决 LLE 正则化问题的另一种方法。在每个用于恢复局部线性结构的邻域内,它会围绕一个基于黑塞的二次型展开。虽然其它的实现表明它对数据大小进行缩放的能力较差,但是 sklearn 实现了一些算法改进,使得在输出低维度时它的损耗可与其他 LLE 变体相媲美。HLLE 可实现为函数 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或其面向对象的形式 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'hessian'` 。它需满足 `n_neighbors > n_components * (n_components + 3) / 2`
W
init  
wizardforcel 已提交
128

129
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0081.png](img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
130

L
loopyme 已提交
131
### 2.2.5.1. 复杂度
W
init  
wizardforcel 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145

HLLE 算法分为三部分:

1.  **近邻搜索**。与标准 LLE 的相同。
2.  **权重矩阵构造**. 大约是 ![O[D N k^3] + O[N d^6]](img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg) 。其中第一项与标准 LLE 相似。第二项来自于局部黑塞估计量的一个 QR 分解。
3.  **部分特征值分解**。与标准 LLE 的相同。

综上,HLLE 的复杂度为 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[N d^6] + O[d N^2]](img/2ad6b07024498864a0ce275913a42d9f.jpg)

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度

L
loopyme 已提交
146
> **参考资料**:
L
loopyme 已提交
147
>*   [“Hessian Eigenmaps: Locally linear embedding techniques for high-dimensional data”](http://www.pnas.org/content/100/10/5591) Donoho, D. & Grimes, C. Proc Natl Acad Sci USA. 100:5591 (2003)
W
init  
wizardforcel 已提交
148

L
loopyme 已提交
149
## 2.2.6. 谱嵌入
W
init  
wizardforcel 已提交
150

151
谱嵌入是计算非线性嵌入的一种方法。scikit-learn 执行拉普拉斯特征映射,该映射是用图拉普拉斯的谱分解的方法把数据进行低维表达。这个生成的图可认为是低维流形在高维空间里的离散近似值。基于图的代价函数最小化确保了流形上彼此临近的点被映射后在低维空间也彼此临近,低维空间保持了局部距离。谱嵌入可执行为函数 [`spectral_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.spectral_embedding.html#sklearn.manifold.spectral_embedding "sklearn.manifold.spectral_embedding") 或它的面向对象的对应形式 [`SpectralEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.SpectralEmbedding.html#sklearn.manifold.SpectralEmbedding "sklearn.manifold.SpectralEmbedding")
W
init  
wizardforcel 已提交
152

L
loopyme 已提交
153
### 2.2.6.1. 复杂度
W
init  
wizardforcel 已提交
154 155 156

谱嵌入(拉普拉斯特征映射)算法含三部分:

157
1.  **加权图结构**。把原始输入数据转换为用相似(邻接)矩阵表达的图表达。
W
init  
wizardforcel 已提交
158 159 160 161 162 163 164 165 166 167
2.  **图拉普拉斯结构**。非规格化的图拉普拉斯是按 ![L = D - A](img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg) 构造,并按 ![L = D^{-\frac{1}{2}} (D - A) D^{-\frac{1}{2}}](img/4bb6ac59e053fd48275c31c9af35b2d1.jpg) 规格化的。
3.  **部分特征值分解**。在图拉普拉斯上进行特征值分解。

综上,谱嵌入的复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[d N^2]](img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg)

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度

L
loopyme 已提交
168
> **参考资料**:
L
loopyme 已提交
169
>*   [“Laplacian Eigenmaps for Dimensionality Reduction and Data Representation”](http://web.cse.ohio-state.edu/~mbelkin/papers/LEM_NC_03.pdf) M. Belkin, P. Niyogi, Neural Computation, June 2003; 15 (6):1373-1396
W
init  
wizardforcel 已提交
170

L
loopyme 已提交
171
## 2.2.7. 局部切空间对齐(LTSA)
W
init  
wizardforcel 已提交
172

173
尽管,严格意义上来说,局部切空间对齐(LTSA) 并不是LLE的变体,但是,从算法角度来说,它们俩又是足够接近的,所以把它放在该目录下。与 LLE 算法关注于保持临点距离不同,LTSA 寻求通过切空间来描述局部几何形状,并(通过)实现全局最优化来对其这些局部切空间,从而得知对应的嵌入。 LTSA 可执行为函数 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或它的面向对象的对应形式 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'ltsa'`
W
init  
wizardforcel 已提交
174

175
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0091.png](img/b74decc4f9ee591a92a5281d0187f05a.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
176

L
loopyme 已提交
177
### 2.2.7.1. 复杂度
W
init  
wizardforcel 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191

LTSA 算法含三部分:

1.  **近邻搜索**。与标准 LLE 的相同。
2.  **加权矩阵构造**。大约是 ![O[D N k^3] + O[k^2 d]](img/8c187292cd29fea23a4983db349e7545.jpg) 。其中第一项与标准 LLE 相似。
3.  **部分特征值分解**。同于标准 LLE 。

综上,复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[k^2 d] + O[d N^2]](img/fa48fa696e5242bb078fb786e6dc24c3.jpg)

*   ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数
*   ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度
*   ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
*   ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度

L
loopyme 已提交
192
> **参考资料**:
L
loopyme 已提交
193
>*   [“Principal manifolds and nonlinear dimensionality reduction via tangent space alignment”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.3693) Zhang, Z. & Zha, H. Journal of Shanghai Univ. 8:406 (2004)
W
init  
wizardforcel 已提交
194

L
loopyme 已提交
195
## 2.2.8. 多维尺度分析(MDS)
W
init  
wizardforcel 已提交
196

197
[多维尺度分析 Multidimensional scaling](https://en.wikipedia.org/wiki/Multidimensional_scaling)[`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") ) 寻求数据的低维表示,而这些低维数据间的距离保持了它们在初始高维空间中的距离。
W
init  
wizardforcel 已提交
198

199
一般来说,(MDS)是一种用来分析在几何空间距离相似或相异数据的技术。MDS 尝试在几何空间上将相似或相异的数据进行建模。这些数据可以是物体间的相似等级,也可是分子的作用频率,还可以是国家简单贸易指数。
W
init  
wizardforcel 已提交
200

201
MDS算法有2类:度量和非度量。在 scikit-learn 中, [`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 类具有上述两者的实现。在度量 MDS 中,输入相似度矩阵源自度量(并因此遵从三角形不等式),输出两点之间的距离被设置为尽可能接近相似度或相异度的数据。在非度量版本中,算法尝试保持距离的控制,并因此寻找在所嵌入空间中的距离和相似/相异之间的单调关系。
W
init  
wizardforcel 已提交
202

203
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0101.png](img/12ab1980b4b3f069be032c0d4f1184ed.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
204

205
设 ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是相似度矩阵,![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 是 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个输入点的坐标。差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg) 是某些最优方式所选择的相似度转换。然后,通过 $$\sum_{i < j} d_{ij}(X) - \hat{d}_{ij}(X)$$ 定义称为 Stress (应力值)的对象。
W
init  
wizardforcel 已提交
206

L
loopyme 已提交
207
### 2.2.8.1. 度量 MDS
W
init  
wizardforcel 已提交
208

209
最简单的度量 [`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 模型称为 _absolute MDS(绝对MDS)_,差异由 ![\hat{d}_{ij} = S_{ij}](img/446d6d36c20a79508f1cc84c737a597b.jpg) 定义。对于绝对 MDS,值 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 应精确地对应于嵌入点的点 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 和 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 之间的距离。
W
init  
wizardforcel 已提交
210 211 212

大多数情况下,差异应设置为 ![\hat{d}_{ij} = b S_{ij}](img/de55c53f911184b6ad3e562a4d694c01.jpg)

L
loopyme 已提交
213
### 2.2.8.2. 非度量 MDS
W
init  
wizardforcel 已提交
214

215
非度量 [`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 关注数据的排序。如果 $$S_{ij} < S_{jk}$$ ,则嵌入应执行 ![d_{ij} &lt; d_{jk}](img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg) 。这样执行的一个简单算法是在 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 上使用 ![d_{ij}](img/e0d8dbb9574d5eb264279927dcf8baaf.jpg) 的单调回归,产生与 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 相同顺序的差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg)
W
init  
wizardforcel 已提交
216 217 218

此问题的 a trivial solution(一个平凡解)是把所有点设置到原点上。为了避免这种情况,将差异 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 标准化。

219
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mds_0011.png](img/fe62193b4391c9f60e373f03623696ac.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_mds.html)
W
init  
wizardforcel 已提交
220

L
loopyme 已提交
221
> **参考资料**:
L
loopyme 已提交
222 223 224
>*   [“Modern Multidimensional Scaling - Theory and Applications”](http://www.springer.com/fr/book/9780387251509) Borg, I.; Groenen P. Springer Series in Statistics (1997)
>*   [“Nonmetric multidimensional scaling: a numerical method”](http://link.springer.com/article/10.1007%2FBF02289694) Kruskal, J. Psychometrika, 29 (1964)
>*   [“Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis”](http://link.springer.com/article/10.1007%2FBF02289565) Kruskal, J. Psychometrika, 29, (1964)
W
init  
wizardforcel 已提交
225

L
loopyme 已提交
226
## 2.2.9. t 分布随机邻域嵌入(t-SNE)
W
init  
wizardforcel 已提交
227

228
t-SNE( [`TSNE`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html#sklearn.manifold.TSNE "sklearn.manifold.TSNE") )将数据点的相似性转换为概率。原始空间中的相似性表示为高斯联合概率,嵌入空间中的相似性表示为 “学生” 的 t 分布。这允许 t-SNE 对局部结构特别敏感,并且有超过现有技术的一些其它优点:
W
init  
wizardforcel 已提交
229

230
*   在一个单一映射上按多种比例显示结构
W
init  
wizardforcel 已提交
231 232 233
*   显示位于多个、不同的流形或聚类中的数据
*   减轻在中心聚集的趋势

234
Isomap、LLE 和其它变体最适合展开单个连续低维流形,而 t-SNE 将侧重于数据的局部结构,并倾向于提取聚类的局部样本组,就像S曲线示例中突出显示的那样。这种基于局部结构对样本进行分组的能力可能有助于在视觉上同时解开包含多个流形的数据集,如数字数据集中的情况。
W
init  
wizardforcel 已提交
235

236
原始空间和嵌入空间中的联合概率的 Kullback-Leibler(KL) 散度将通过梯度下降而最小化。注意,KL 发散不是凸的,即具有不同初始化的多次重新开始将以KL发散的局部最小值结束。因此,有时候,通过尝试不同的开始值来选择具有最低KL散度的嵌入是非常有用的。
W
init  
wizardforcel 已提交
237 238 239 240 241 242

使用 t - SNE 的缺点大致如下:

*   t-SNE 的计算成本很高,在百万样本数据集上可能需要几个小时,而PCA将在几秒或几分钟内完成同样工作。
*   Barnes-Hut t-SNE 方法仅限于二维或三维嵌入。
*   该算法是随机的,不同种子的多次重新开始可以产生不同的嵌入。然而,以最小的误差选择嵌入是完全合理的。
243
*   未明确保留全局结构。用PCA初始化点(使用 *init=’pca’* ),可以减轻此问题。
W
init  
wizardforcel 已提交
244

245
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0131.png](img/afcad7956ba0a3a4a6771ee9810280c2.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
W
init  
wizardforcel 已提交
246

L
loopyme 已提交
247
### 2.2.9.1. 优化 t-SNE
W
init  
wizardforcel 已提交
248 249 250 251 252

t-SNE 的主要目的是实现高维数据的可视化。因此,当数据将嵌入到二维或三维时,它效果最好。

优化KL发散有时可能有点棘手。有五个参数控制 t-SNE 的优化,因此可能也控制最终嵌入的质量:

253
*   困惑度
W
init  
wizardforcel 已提交
254 255 256 257 258
*   早期增长因子
*   学习率
*   最大迭代次数
*   角度(不在精确方法中使用)

259
困惑度(perplexity _译注:有时也作混乱度_)定义为 ![k=2^(S)](img/81dfab5bd4f0d37601684acb3d714e9d.jpg) ,其中 ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是条件概率分布的香农熵。k 面色子的复杂度是 k ,因此 k 实际上是生成条件概率时 t-SNE 考虑的最近邻域的个数。复杂度越大导致有越多的近邻域,则对小结构越不敏感。相反地,越低的困惑度考虑越少的邻域,并因此忽略越多的全局信息而越关注局部邻域。当数据集的大小变大时,需要更多的点来获得局部邻域的合理样本,因此可能需要更大的困惑度。类似地,噪声越大的数据集需要越大的困惑度来包含足够的局部邻域,以超出背景噪声。
W
init  
wizardforcel 已提交
260

261
最大迭代次数通常足够高,并不需要任何调整。优化分为两个阶段:早期增长阶段和最终优化阶段。在早期增长阶段,原始空间中的联合概率将通过与给定因子相乘而被人为地增加。越大的因子导致数据中的自然聚类之间的差距越大。如果因子过高,KL 发散可能在此阶段增加。通常不需要对其进行调谐。学习率是一个关键参数。如果梯度太低,下降会陷入局部极小值;如果过高,KL发散将在优化阶段增加。可以在 Laurens van derMaaten 的常见问题解答中找到更多提示(见参考资料)。最后一个参数角度是性能和精度之间的折衷。角度越大意味着我们可以通过单个点来近似的区域越大,从而导致越快的速度,但结果越不准确。
W
init  
wizardforcel 已提交
262

263
[“如何高效使用 t-SNE”](http://distill.pub/2016/misread-tsne/) 提供了一个关于各种参数效果的讨论,以及用来探索不同参数效果的交互式绘图。
W
init  
wizardforcel 已提交
264

L
loopyme 已提交
265
### 2.2.9.2. Barnes-Hut t-SNE
W
init  
wizardforcel 已提交
266

267
在此实现的 Barnes-Hut t-SNE 通常比其他流形学习算法慢得多。优化是很困难的,梯度的计算是 ![O[d N log(N)]](img/f60c0101ae8f649bb02ed8b24b30fd83.jpg) ,其中 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 是输出维数,![N](img/a44a7c045f2217894a894c482861387a.jpg) 是样本个数。Barnes-Hut 方法在 t-SNE 复杂度为 ![O[d N^2]](img/9642d01a97f06869baba6159e3438677.jpg) 的精确方法之上进行了改进,但有其他几个显著区别:
W
init  
wizardforcel 已提交
268

片刻小哥哥's avatar
片刻小哥哥 已提交
269
*   Barnes-Hut 仅在目标维度为3或更小时,才有效。构建可视化时,基于2-D的示例是典型的示例。
270
*   Barnes-Hut 仅适用于密集的输入数据。稀疏数据矩阵只能用精确方法嵌入,或者可以通过密集的低阶投影来近似,例如使用 [`sklearn.decomposition.TruncatedSVD`](https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD")
271
*   Barnes-Hut 是精确方法的一种近似。这种近似方法使用 angle 作为参数,因此当参数 method=”exact” 时,angle 参数无效。
W
init  
wizardforcel 已提交
272 273
*   Barnes-Hut 的拓展性很高。Barnes-Hut 可用于嵌入数十万个数据点,而精确方法只能处理数千个样本,再多就很困难了。

274
出于可视化目的( t-SNE 的主要使用情况),强烈建议使用 Barnes-Hut 方法。精确的 t-SNE 方法可用于检验高维空间中嵌入的理论性质,但由于计算能力的约束而仅限于小数据集。
W
init  
wizardforcel 已提交
275

276
同时可以注意到,数字 label 与 t-SNE 发现的自然聚类大致匹配,而 PCA 模型的线性 2D 投影产生了标签区域在很大程度上重叠的表示。这是一个强有力的线索,表明该数据可以通过关注局部结构的非线性方法(例如,具有高斯 RBF 核的 SVM )很好地分离。然而,如果不能在二维中用 t-SNE 来可视化分离良好的均匀标记组,并不一定意味着数据不能被监督模型正确地分类。可能是因为 2 维还不够低,无法准确表示数据的内部结构。
W
init  
wizardforcel 已提交
277

L
loopyme 已提交
278
> **参考资料**:
L
loopyme 已提交
279 280 281
>*   [“Visualizing High-Dimensional Data Using t-SNE”](http://jmlr.org/papers/v9/vandermaaten08a.html) van der Maaten, L.J.P.; Hinton, G. Journal of Machine Learning Research (2008)
>*   [“t-Distributed Stochastic Neighbor Embedding”](http://lvdmaaten.github.io/tsne/) van der Maaten, L.J.P.
>*   [“Accelerating t-SNE using Tree-Based Algorithms.”](https://lvdmaaten.github.io/publications/papers/JMLR_2014.pdf) L.J.P. van der Maaten. Journal of Machine Learning Research 15(Oct):3221-3245, 2014.
W
init  
wizardforcel 已提交
282

L
loopyme 已提交
283
## 2.2.10. 实用技巧
W
init  
wizardforcel 已提交
284 285

*   确保对所有特征使用相同的缩放。因为流形学习方法是基于最近邻搜索的,否则算法的性能可能很差。有关缩放异构数据的方便方法,请参阅 [StandardScaler](preprocessing.html#preprocessing-scaler)
286 287 288
*   由每个例程计算的重构误差可用于选择最佳输出维度。对于嵌入在 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 维参数空间中的 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 维流形,重构误差将随着 `n_components` 的增加而减小,直到 `n_components == d`
*   注意,噪声数据可以对流形造成“短路”,其实质上充当了一个桥梁,用于连接流形的不同部分,否则(没有这样的“桥梁”)这些流形将被很好地划分开。基于噪声和/或不完全数据的流形学习是一个活跃的研究领域。
*   某些输入配置可能导致奇异加权矩阵,例如,当数据集中的两个以上点完全相同时,或者当数据被分割成不连续的组时。在这种情况下, `solver='arpack'` 将无法找到零空间(null space)。解决这一问题的最简单方法是使用 `solver='dense'` ,它将在一个奇异矩阵上进行,尽管它可能因为输入点的数量而非常缓慢。或者,人们可以尝试理解奇异性的来源:如果它是由于不相交的集合,增加 `n_neighbors` 可能有所帮助;如果是由于数据集中的相同点,则删除这些点可能有所帮助。
W
init  
wizardforcel 已提交
289

L
loopyme 已提交
290
>See also:[完全随机树嵌入](ensemble.html#random-trees-embedding) 也可以用于得到特征空间的非线性表示,另外它不用降维。