Manifold Learning(流形学习)
其实我们要做的事情就是降维,但是是非线性的降维。
假设data其实是分布在一个低维的空间中,只是扭曲的被塞到了一个高维的空间中,比如地球的表面,它是一个二维的平面,但是被放到了一个三维的空间中。
在这个manifold中,很近的情况下,欧式距离是有意义的,但是距离比较远的情况下,欧氏距离就没有意义了。
上图中,123点距离比较近,那么根据欧式距离我们可以看出23比21相近,但是对于245三个点,虽然24欧式距离比25近,但很有可能是实际中25比较相近。
那manifold learning要做的事情就是把高维上的低维空间摊平,这样的好处就是可以用欧式距离来评判点和点之间的距离,这对接下的cluster或者supervised learning等都是有帮助的。
类似的方法有很多,我们现在很快介绍几种方法然后讲TSNE。
Locally Linear Embedding(LLE)
原来空间中有xi,然后找到k个邻居xj,我们假设每个xi都可以通过它的邻居经过线性组合得到它,求出一组wij,
求出wij之后就将其固定住不变,然后在低维空间上找出zi和zj(它们是另外的vector),它们之间的关系还是wij,
zj也可以用同样的线性组合找到zi,现在wij是已知的,要找出一组z,使得zj透过wij求和之后可以与zi越接近越好。
其实LLE并没有一个明确的函数来告诉你怎么应用之后达到降维,降维后的z完全是凭空找出来的。用LLE有一个好处就是就算你不知道原来的xi和xj,你只知道wij,也可以用LLE求出来zi和zj。
LLE要确定好neighbor有几个,neighbor的个数要刚刚好才能达到好的效果。K太大的话,欧式距离就没有意义了,会导致结果不好了。
Laplacian Eigenmaps(拉普拉斯特征映射)
如下图中的两个点,求它的欧氏距离是不足够的,两个点之间有high density的connection它们才算很接近,可以用一个graph来表示data point,将比较近的点连起来,把点变成graph之后,你考虑smoothness的距离就可以被graph上的connection来近似。
回顾semi-supervised:loss函数包含一个label有关的项和一个与label无关的s项,wij大表示二者相近,期望yi和yj越接近越好:
L就是graph的laplacian。
那一样的道理可以完全应用在非监督的学习上,我们可以说在高维上x1和x2相近,那么在低维上的z1和z2也是相近的,下图中的S中平方不是很好,可以改成欧氏距离。如果xi和xj的data point很像(wij比较大),那zi和zj做完降维之后的距离就很近,反之wij很小,距离怎样都可以。但是直接minimize S是不可以的,因为你可以初始化zi=zj=0,那S就等于0,(这与刚才的Loss不一样,因为上述的损失函数里有supervised的那一项,都设置成0那一项会很大)。
所以要给z一些constraints,如果z是M维的,但是我们不希望z实际是在 比M更低维的空间中,假设找到了N个z,占据了M维的空间。解出来z之后,你会发现与之前的graph的laplacian L是有关系的,z就是L=D-W的特征向量。
T-distributed Stochastic Neighbor Embedding(t-SNE)
前面的方法只考虑了相近的点要在一起,但是没有考虑距离远的点要分开。
对于t-SNE也是要先降维,
对于原来的xi,xj求出similarity S(xi,xj),再做一个normalization P(xj|xi)
假设我们找出了降维之后的z,按照上述过程也可以求出:
做normalization是有必要的,最后的结果都是几率,映射到0-1之间。
然后我们要让x和z的distribution越相似越好。
其实只要用梯度下降就可以找了,将两个公式带入,然后只要对z做微分就可以求出结果,
只是要求所有data point之间的similarity会比较麻烦,所以可以用PCA来降维,然后再用t-SNE来降维。
t-SNE是没办法预测新的data point的,只能对现有的data跑一遍得到降维结果。
t-SNE-Simila Measure
那t-SNE怎么求similarity呢?原来的data point用的是
但是t-SNE用的是:
这样用的好处是,假设横轴代表了将为之后的欧氏距离,如果原来的两个点距离比较远,那变到t-distribution之后距离会被拉的更远,因为t-distribution的尾巴很长,那跑完t-SNE之后的结果如下,会聚集成一团一团的,不同之间有一定的距离: