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中对数据进行加密的几种方法

    加密算法有很多种:这里只大约列举几例: 1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹.MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要, ...

  2. 视频框架 Vitamio使用

    转自http://blog.csdn.net/u010181592/article/category/5893483 1.在https://github.com/yixia/VitamioBundle ...

  3. [学习总结]2、android中的VelocityTracker(获得速率用的类)

    参考资料:http://blog.jrj.com.cn/4586793646,5298605a.html 感谢这位兄弟! android.view.VelocityTracker主要用跟踪触摸屏事件( ...

  4. 技术预演blog

    canal整合springboot实现mysql数据实时同步到redis spring+mysql集成canal springboot整合canal监控mysql数据库 SpringBoot cana ...

  5. Linux学习 - 挂载命令

    一.mount 1 功能 将外设手工挂载到目标挂载点 2 语法 mount  [-t 文件系统]  [设备文件名]  [挂载点] 3 范例 mkdir  /mnt/cdrom 在/mnt下创建一个cd ...

  6. oralce 存储过程传入 record 类型的参数?

    先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...

  7. Playing with Destructors in C++

    Predict the output of the below code snippet. 1 #include <iostream> 2 using namespace std; 3 4 ...

  8. Default Constructors

    A constructor without any arguments or with default value for every argument, is said to be default ...

  9. SpringCloud微服务服务间调用之OpenFeign介绍

    开发微服务,免不了需要服务间调用.Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用. Op ...

  10. 【Linux】【Services】【Package】yum

    Linux程序包管理(2)       CentOS: yum, dnf       URL: ftp://172.16.0.1/pub/        YUM: yellow dog, Yellow ...