Der Maaten L V, Hinton G E. Visualizing data using t-SNE[J]. Journal of Machine Learning Research, 2008: 2579-2605.

t-sne是一个非常经典的可视化方法.

主要内容

我们希望, 将高维数据\(\mathcal{X}=\{x_1,x_2,\ldots,x_n\}\)映射到一个低维空间\(\mathcal{Y}=\{y_1,y_2,\ldots, y_n\}\), 同时保留相关性(这里的相关性就不局限于PCA在意的线性相关性了).

Stochastic Neighbor Embedding

利用核密度估计, 估计原空间中各点条件概率:

\[\tag{1}
p_{j|i} = \frac{\exp(-\|x_i-x_j\|^2/2\sigma_i^2)}{\sum_{k\not=i}\exp(-\|x_i-x_k\|^2/2\sigma_i^2)},
\]

显然\(p_{j|i}\)衡量了俩个点的一个相关关系.

而在低维空间中, 我们用类似的方法估计:

\[\tag{2}
q_{j|i} = \frac{\exp(-\|y_i-y_j\|^2)}{\sum_{k\not=i} \exp(-\|y_i-y_k\|^2)}.
\]

一个很自然的问题是, (1)有\(\sigma\)为什么(2)没有, 这是因为\(y\)是\(x\)的一个映射, 你加个\(\sigma\)也就是rescale一下这个映射而已(应该是在低维取相同的\(\sigma\)的情况下).

另外一个问题是, \(\sigma\)是如何估计的, 对于每个\(\sigma_i\), 都有一组概率\(P_i\), 定义一个perplexity:

\[\tag{4}
Perp(P_i)=2^{H(P_i)},
\]

其中\(H(P_i)\)表示香农熵. 根据(4)利用二分法搜索, 通常选择5-50. (why?)

实际上, 我们还没有找到\(y\), 为了保证映射前后相关性一致, 利用KL-散度(非对称)来度量

\[\tag{3}
C=\sum_i KL(P_i\|Q_i) = \sum_i \sum_j p_{j|i} \log \frac{p_{j|i}}{q_{j|i}}.
\]

需要注意的是, 因为考虑的是俩俩的相关性, 所以假设\(p_{i|i}=q_{i|i}=0\), 说实话感觉好扯啊, 为啥不假设为1(因为概率和为1, 公式不好调整?).

显然(3)是关于\((y_1,\ldots,y_n)\)的一个函数, 可以用梯度下降方法去最小化使得分布近似, 梯度为

\[\tag{6}
\frac{\delta C}{\delta y_i} = 2\sum_j (p_{j|i}-q_{j|i} + p_{i|j}-q_{i|j})(y_i-y_j).
\]

说实话, 我证明的结果有出入因为\(\sum_{i}p_{j|i}\)好像不等于1吧.

最后迭代公式用了momentum

\[\tag{7}
\mathcal{Y}^{(t)}=\mathcal{Y}^{(t)} + \eta \frac{\delta C}{\delta \mathcal{y}} +\alpha (t) (\mathcal{Y}^{(t-1)} - \mathcal{Y}^{(t-2)}).
\]

t-SNE

由于crowding problem (好像是指高维数据映射到低维数据发生重叠). 为了解决这种问题, 作者采用了俩个处理, 第一, 在联合分布上求解

\[C=KL(P\|Q)=\sum_i \sum_j p_{ij} \log \frac{p_{ij}}{q_{ij}},
\]

其中(为了保证\(p_{ij}\)不会太小)

\[p_{ij} = \frac{p_{j|i}+p_{i|j}}{2n},
\]

或者像公式(10)中的那样根据对称SNE的估计?

\[\tag{12}
q_{ij} = \frac{(1+\|y_i-y_j\|^2)^{-1}}{\sum_{k\not= l} (1+\|y_k-y_l\|^2)^{-1}}.
\]

\(q\)采取这种估计方式(单自由度t分布而非高斯形式), 论文的解释是t分布的拖尾效果比高斯的强, 这会导致高维空间中距离较大的点在低维空间中的映射也会保持一个较大的距离, 从而能够缓解 crowding problem.

此时的梯度为

\[\tag{13}
\frac{\delta C}{\delta y_i} = 4\sum_{j} (p_{ij}-q_{ij})(y_{i}-y_j)(1+\|y_i-y_j\|^2)^{-1}.
\]

只需要考虑\(-\sum_{ij}p_{ij}\log q_{ij}\)关于\(y_c\)的导数即可,

\[\frac{\delta q_{cj}}{\delta y_c} = \frac{\delta q_{jc}}{\delta y_c}= 2q_{cj}[(y_j-y_c)u_{cj}^{-1}-\sum_{k} q_{kc}(y_k-y_c)u_{kc}^{-1}-\sum_{l} q_{cl}(y_l-y_c)u_{lc}^{-1}],
\]

其中

\[u_{kl} = 1+\|y_k-y_l\|^2.
\]
\[\frac{\delta q_{ij}}{\delta y_c} = 2q_{ij}[-\sum_{k} q_{kc}(y_k-y_c)u_{kc}^{-1}-\sum_{l} q_{cl}(y_l-y_c)u_{lc}^{-1}], i \not=c, j \not=c.
\]

可以综合为

\[4\sum_j p_{cj}(y_j-y_c)u_{cj}^{-1},
\]

\[4\sum_{kl} p_{kl} \sum_jq_{cj} (y_c-y_j)u_{cj}^{-1},
\]

在结合最开始有一个\(-\)就可以得到最后的结果了.

Visualizing Data using t-SNE的更多相关文章

  1. [D3] Start Visualizing Data Driven Documents with D3 v4

    It’s time to live up to D3’s true name and potential by integrating some real data into your visuali ...

  2. R TUTORIAL: VISUALIZING MULTIVARIATE RELATIONSHIPS IN LARGE DATASETS

    In two previous blog posts I discussed some techniques for visualizing relationships involving two o ...

  3. 【转】The most comprehensive Data Science learning plan for 2017

    I joined Analytics Vidhya as an intern last summer. I had no clue what was in store for me. I had be ...

  4. t-SNE完整笔记

    http://www.datakit.cn/blog/2017/02/05/t_sne_full.html t-SNE(t-distributed stochastic neighbor embedd ...

  5. <机器学习>无监督学习算法总结

    本文仅对常见的无监督学习算法进行了简单讲述,其他的如自动编码器,受限玻尔兹曼机用于无监督学习,神经网络用于无监督学习等未包括.同时虽然整体上分为了聚类和降维两大类,但实际上这两类并非完全正交,很多地方 ...

  6. Deep Clustering Algorithms

    Deep Clustering Algorithms 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 本文研究路线:深度自编码器(Deep Autoen ...

  7. Atitit.attilax软件研发与项目管理之道

    Atitit.attilax软件研发与项目管理之道 1. 前言4 2. 鸣谢4 3. Genesis 创世记4 4. 软件发展史4 5. 箴言4 6. 使徒行传 4 7. attilax书 4 8. ...

  8. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  9. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

随机推荐

  1. 学习java 7.21

    学习内容: 模块使用 AWT是窗口框架 它从不同平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台.简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面 ...

  2. accent, accept

    accent A colon (:) is used to represent a long vowel, e.g. sheet /ʃiːt/ and shit /ʃit/. The word bed ...

  3. java打jar包和运行jar包的两种方式

    java打jar包和运行jar包的两种方式更详细的打包方式请参考https://www.cnblogs.com/mq0036/p/8566427.html 一.java类不依赖第三方jar包以简单的一 ...

  4. Java中特殊的类——包装类

    Java中特殊的类--包装类 包装类就是将基本数据类型封装在类中. 1.包装类 (1)自定义包装类 将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理. 此时IntDemo类就是in ...

  5. Linux学习 - 文件特殊权限

    一.SUID权限(只针对文件) 只有可执行的二进制程序才能设定SUID权限 命令执行者要对该程序拥有x(执行)权限 1 拥有SUID的文件 /usr/bin/passwd 2 功能: 命令执行者(其他 ...

  6. zabbix之修改中文

    #在zabbix服务器安装中文名包 root@ubuntu:~# sudo apt-get install language-pack-zh* #:修改环境变量 root@ubuntu:~# sudo ...

  7. 【HarmonyOS】【Json解析】ZSON 与 HiJson 使用

    HiLog配置 为了方便调试,查看,先设置好Hilog public static final HiLogLabel loglabel = new HiLogLabel(HiLog.LOG_APP,0 ...

  8. 【阿菜漏洞复现】DeFi 平台 MonoX Finance 漏洞分析及复现

    前言 2021 年 11 ⽉ 30 ⽇,DeFi 平台 MonoX Finance 遭遇攻击,损失共计约 3100 万美元. 造成本次攻击的漏洞主要有两个: 移除流动性的函数未对调用者进行检测,使得任 ...

  9. ctypes与numpy.ctypeslib的使用

    numpy ctypeslib 与 ctypes接口使用说明 作者:elfin 目录 一.numpy.ctypeslib使用说明 1.1 准备好一个C++计算文件 1.2 ctypeslib主要的五个 ...

  10. HGAME2021 week4 pwn writeup

    第四周只放出两道题,也不是很难. house_of_cosmos 没开pie,并且可以打got表. 在自写的输入函数存在漏洞.当a2==0时,因为时int类型,这里就会存在溢出.菜单题,但是没有输出功 ...