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. HTML 基本标签2

    HTML标题通过<h1>-<h6>标签定义(<h1>定义最大的标题,<h6>定义最小的标题) <html>用于定义HTML文档 HTML段落 ...

  2. github小白的记录随笔

    此文章是基础本地安装好了git环境的新手小白. 进入您要上传项目的根路径,右键选择Git Bash Here. 输入命令: git init //初始化git仓库环境 git remote add o ...

  3. 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka

    1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...

  4. int是几位;short是几位;long是几位 负数怎么表示

    其实可以直接通过stm32的仿真看到结果:(这里是我用keil进行的测试,不知道这种方法是否准确) 从上面看, char是8位  short是4*4=16位  int是8*4=32位  long是8* ...

  5. 利用unordered_map维护关联数据

    在leetcode上刷339题Evaluate Division(https://leetcode.com/problems/evaluate-division/#/description)时在脑中过 ...

  6. html5 绘图

    SVG 在 SVG 中,每个元素是图型与数据相结合的一个对象. 修改对象属性的值,图型会立即体现出这种变化. 因为是对象,所以支持事件处理. D3使用的是SVG Canvas 不支持事件处理. cha ...

  7. Does compiler create default constructor when we write our own?

    In C++, compiler by default creates default constructor for every class. But, if we define our own c ...

  8. 阿里云esc 登录时的相关提示

    1. 如果该ecs 未绑定密钥对,可以通过常规的用户名密码登录 2. 如果该 ecs 绑定了密钥对,则需要通过私钥进行登录 3. 如果使用 比如 securityCRT 登录时报 " A p ...

  9. 【VSCode】检测到 #include 错误。请更新 includePath。已为此翻译单元(C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\i686-

    win+r 运行cmd 输入"gcc -v -E -x c -"获取mingw路径: 我的: #include "..." search starts here ...

  10. 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解

    留念 C - 志愿者 排序..按照题目规则说的排就可以.wa了两发我太菜了qwq #include<bits/stdc++.h> using namespace std; const in ...