流形学习初步
说明
整理了一些直观概念,并没有很多的数学推导,里面的一些数学conception(eg.拓扑结构)都是比较基础的,可以去wiki上找相应的定义。
思维导图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9fi6VsJ-1598025783087)(C:\Users\nicow\AppData\Local\Temp\1598009123311.png)]
1. 流形基础
直观感受
特征冗余:我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。
eg:(三维空间的二维曲面)如图数据分布于一个三维空间中一个曲面,但是我们可以将其铺平到二维空间中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OMTQzAv-1598025783092)(C:\Users\nicow\AppData\Local\Temp\1598009251710.png)]
直观定义(d维流形)
局部(chart)同胚与d维欧式空间的拓扑结构,即局部具有线性性质的拓扑结构。
Eg: 地球的表面就是一个经典的二维流形,如果想测量北京到纽约(整体)的距离,显然不能直接在三维空间中使用欧氏距离,需要把地球展开成一个平面(类似与地图),然后测量距离(geodesic),但是相比较下,如果测量北京到天津的距离(局部),就可以近似的用欧式空间的距离公式。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsXLObpx-1598025783097)(C:\Users\nicow\AppData\Local\Temp\1598009493073.png)]
黎曼流形
-
黎曼度量(广义坐标系下的勾股定理,类似于一把卷尺可以测量两点之间的geodesic):
如:
极坐标: d s 2 = d r 2 + r 2 d θ 2 ds^2=dr^2+r^2 dθ^2 ds2=dr2+r2dθ2
单位球面: d s 2 = d θ 2 + s i n 2 θ d φ 2 ds^2=dθ^2+sin^2 θdφ^2 ds2=dθ2+sin2θdφ2
推广到一般二维: d s 2 = G 1 ( x 1 , x 2 ) d ( x 1 ) 2 + G 2 ( x 1 , x 2 ) d x 1 d x 2 + G 3 ( x 1 , x 2 ) d ( x 2 ) 2 ds^2=G_1 (x^1,x^2)d(x^1)^2+G_2 (x^1,x^2)dx^1 dx^2+G_3 (x^1,x^2)d(x^2)^2 ds2=G1(x1,x2)d(x1)2+G2(x1,x2)dx1dx2+G3(x1,x2)d(x2)2
推广到n维向量形式: d s 2 = d x T g d x ds^2=dx^T gdx ds2=dxTgdx
我们把系数矩阵g称为黎曼度量,由于 g u v = g v u g_{uv}=g_{vu} guv=gvu,可以被分解为 g = h T h g = h^T h g=hTh, 所以
d s 2 = d x T h T h d x = ( h d x ) T ( h d x ) = ∣ h d x ∣ T ds^2= dx^T h^T hdx=(hdx)^T (hdx)=|hdx|^T ds2=dxThThdx=(hdx)T(hdx)=∣hdx∣T(hdx的模长)
这里的h就是从当地坐标系到局部的直角坐标系的变换矩阵(雅克比矩阵)
- 黎曼流形:如果在流形的(局部)空间中可以建立黎曼度量(即存在黎曼度量),这个流形就是黎曼流形,整个黎曼流形也就成为了一个度量空间。
2. 作用:降维 (全局结构VS局部结构)
-
全局结构
线性降维(将高维数据集通过简单的线性映射到低维空间):如PCA、MDS。具体来讲,就是通过寻找一组线性向量基,将数据映射到其均方误差失真最小的低维线性空间中,尽量保留高维数据集中对方差贡献最大的特征。
在低维空间中无法通过欧氏距离表示任意两点之间的相似度
测地距离更能反映样本之间在流形中的真实距离(所以线性降维在部分场合的效果不理想)
-
局部结构
非线性降维:各种流形学习算法(更注重保局部空间的特点)
3. 常见流形学习算法
ISOMAP(等度量映射)
steps:
- 求K近邻(knn算法)建立邻接图。
- 用测地距离替代欧氏距离。
- 最终代价函数为高维空间点距离与低维空间点距离差之和。
disadvantages:
要找所有样本全局的最优解,当数据量很大,样本维度很高时,计算非常的耗时
LLE(局部线性嵌入)
**特点:**假设数据在较小的局部是线性的
过程:
- 求K近邻,可以用样本的neighbors线性表示样本。
- 对损失函数$J(w)=∑_{i=1}^m||x_i-∑_{j∈Q(i)}w_{ij} x_j ||_2 $,利用拉格朗日乘数法计算权重矩阵
(这里的Q(i)表示第i个样本的k临近结果的下标集合)
- 对损失函数$J(Y)=∑_{i=1}^m||y_i-∑_{j∈Q(i)}w_{ij} y_j ||_2 =tr(Y(I-W)(I-W)^T Y^T) $
- 令 M = ( I − W ) ( I − W ) T M=(I-W)(I-W)^T M=(I−W)(I−W)T
- 之后的方法类似于PCA算法的处理过程,最小化J(Y)对应的Y就是M的最小的d个特征值所对应的d个特征向量组成的矩阵。
ISOMAP和LLE算法可以参考这篇博客:https://blog.csdn.net/qq_30683589/article/details/80376614
SNE( stochastic neighbor embedding )
steps:
-
把欧式距离转换为条件概率来表示相似性:
- p j ∣ i = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 / 2 σ i 2 ) ∑ k ≠ i e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / 2 σ i 2 ) p_{j|i}=\frac {exp(-||x_i-x_j ||^2/2σ_i^2) }{∑_{k≠i}exp(-||x_i-x_k ||^2/2σ_i^2)} pj∣i=∑k=iexp(−∣∣xi−xk∣∣2/2σi2)exp(−∣∣xi−xj∣∣2/2σi2) (x表示高维数据,和高维数据的相似性成正比)
- q j ∣ i = e x p ( − ∣ ∣ y i − y j ∣ ∣ 2 / 2 σ i 2 ) ∑ k ≠ i e x p ( − ∣ ∣ y i − y k ∣ ∣ 2 / 2 σ i 2 ) q_{j|i}=\frac {exp(-||y_i-y_j ||^2/2σ_i^2) }{∑_{k≠i}exp(-||y_i-y_k ||^2/2σ_i^2)} qj∣i=∑k=iexp(−∣∣yi−yk∣∣2/2σi2)exp(−∣∣yi−yj∣∣2/2σi2)(y表示低维数据,这里σ为固定值1/根二)
-
用KL距离(Kullback-Leibler Divergence)作为代价函数
C= ∑ i K L ( P i ∣ ∣ Q i ) = ∑ i ∑ j p i ∣ j l o g p i ∣ j / q i ∣ j ∑_iKL(P_i ||Q_i )=∑_i∑_jp_{i|j} log p_{i|j}/q_{i|j} ∑iKL(Pi∣∣Qi)=∑i∑jpi∣jlogpi∣j/qi∣j
disadvantages:
SNE的代价函数更关注局部结构,而忽视了全局结构.
对称SNE
p i j = p j ∣ i + p i ∣ j 2 n p_{ij}=\frac {p_{j|i}+p_{i|j}}{2n} pij=2npj∣i+pi∣j
解决了SNE中的不对称性,梯度公式更加简单, 但是效果没有太大的提升。
Crowed:
如果这张图并没有把标签展示出来,其实这五个类之间的区别不会特别明显,可以想象一下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwgxb1Nv-1598025783104)(C:\Users\nicow\AppData\Local\Temp\1598010968760.png)]
t-SNE
Reason for Crowded:
高维空间的距离关系无法完全保留,对于一个m维的球体,想象在这个球体分布均匀的n个点,下面是对着n个点和圆心的距离的分布图。通过观察下图,我们可以发现对于m较大的球,其中的点更多的分布在距离圆心叫远的部分。
想象一下,如果我们直接降维的话,远来m维的球体中的点,降到t维(m>>t),原来这些点到圆心的距离结构就会发生变化,无法完整的保存。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VGun9EQM-1598025783107)(C:\Users\nicow\AppData\Local\Temp\1598011054396.png)]
steps:
在SNE的基础上,使用自由度为1的t分布重新定义了 q i j q_{ij} qij (这里为什么用,t分布,可以参考下面的文章,讲的很清楚)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjTPwXUW-1598025783110)(C:\Users\nicow\AppData\Local\Temp\1598011123847.png)]
783107)]
steps:
在SNE的基础上,使用自由度为1的t分布重新定义了 q i j q_{ij} qij (这里为什么用,t分布,可以参考下面的文章,讲的很清楚)
[外链图片转存中…(img-yjTPwXUW-1598025783110)]
t-SNE算法可以参考这篇文章:http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis/