我是靠谱客的博主 淡然绿茶,最近开发中收集的这篇文章主要介绍t-SNE学习笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

http://www.datakit.cn/blog/2017/02/05/t_sne_full.html
拜读了这位大神的笔记,有些一开始不太明白的地方,写个笔记记下来。

1.1基本原理

SNE是通过仿射(affinitie)变换将数据点映射到概率分布上,主要包括两个步骤:

SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。
SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似。
我们看到t-SNE模型是非监督的降维,他跟kmeans等不同,他不能通过训练得到一些东西之后再用于其它数据(比如kmeans可以通过训练得到k个点,再用于其它数据集,而t-SNE只能单独的对数据做操作,也就是说他只有fit_transform,而没有fit操作)

这里有几个点需要提一下。
我们的目标是把一系列高维的向量投影到2-3维空间中来,其中一种方法就是用PCA,而这里的方法就是构建一个高维对象之间的概率分布,
为啥要构建这个分布,因为如果只从可视化的角度来看的话,我们只需要利用到每个点之间的距离信息,就能够把他们在低维空间给画出来。
而什么是概率分布,就是如果你有N个M维向量,那么这个分布就可以表示成一个NxN矩阵。Pij表示第i个点对于第j个点的相似度,也就是原空间中距离的远近,这个矩阵就能表示所有的距离信息。

SNE在低维空间里在构建这些点的概率分布,这句话什么意思呢?
然后我在二维或者三维空间随机撒N个点,这些点也可以表示成距离和相似度矩阵。好吧,这里有两个矩阵了,也就是两个概率分布,我们要做的就是尽可能的使得,低维度空间中的概率分布去接近高维度的概率分布,所以自然就想到了KL距离。让两个分布的KL距离尽快能的小,去优化这个目标,要用到梯度下降,从代码的角度来说开始是一些随机的点,然后经过多次迭代,原空间近的点低维空间也近,原空间远的点低维空间也远,当然这是最理想的结果。SNE已经能够取得不错的效果。

1.2 SNE原理推导

SNE是先将欧几里得距离转换为条件概率来表达点与点之间的相似度。具体来说,给定一个M个高维的数据 x1,...,xM , t-SNE首先是计算概率 pij ,正比于 xi xj 之间的相似度(这种概率是我们自主构建的),即:

p(j/i)=exp(xixj2/(2σ2i))kiexp(xixk2/(2σ2i))

这里的有一个参数是 σi ,对于不同的点 xi 取值不一样,后续会讨论如何设置。此外设置 pxx=0 ,因为我们关注的是两两之间的相似度。

那对于低维度下的 yi (最开始我们随机撒N个点,然后通过梯度下降的方法调整他们的坐标,经过若干次迭代,得到一个降维可视化的结果),我们可以指定高斯分布为方差为 12 ,因此它们之间的相似度如下:

qji=exp(yiyj2)kiexp(yiyk2)

同样,设定 qii=0

如果降维的效果比较好,局部特征保留完整,那么 pij=qij , 因此我们优化两个分布之间的距离-KL散度(Kullback-Leibler divergences),那么目标函数(cost function)如下:

C=iKL(PiQi)=ijpjilogpjiqji

总的来说SNE的思想是,我们有高维空间N个点的向量表示,然后计算出点之间两两的距离,也就是相似度,距离越小越相似。也就是一个N*N的对称矩阵。

然后我们在低维(2,3)空间随机初始化N个点,这N个点之间的距离也是一个N*N的矩阵,也表示点在低维空间的相似度,距离。

最后我们要优化的就是使得这两个分布(使用高斯分布将距离转换为概率分布)的KL距离越小越好,也就是这两个分布越接近越好。

然后每次迭代计算出梯度,更新这些点在低维空间的位置。

而T-SNE就是把距离转换为概率分布的时候用t分布,长尾分布。
它的好处就是
t-SNE的梯度更新有两大优势:

对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。
这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

参考自:http://www.datakit.cn/blog/2017/02/05/t_sne_full.html

最后

以上就是淡然绿茶为你收集整理的t-SNE学习笔记的全部内容,希望文章能够帮你解决t-SNE学习笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部