t-SNE:如何理解与高效使用
摘要
尽管t-SNE
对于可视化高维数据非常有用,但有时其结果可能无法解读或具有误导性。通过探索它在简单情况下的表现,我们可以学会更有效地使用它。
探索高维数据的一种流行方法是t-SNE
,由 van der Maaten 和 Hinton[1] 在 2008 年提出。该技术已在机器学习领域得到广泛应用,因为它具有几乎神奇的能力,可以从数百甚至数千维的数据中获取其二维的表示。尽管结果令人印象深刻,但这些结果很容易被误读。本文[2]的目的就是指出一些常见的误解。
我们将通过一系列简单的示例来说明 t-SNE
图可以显示和不能显示的内容。t-SNE
技术确实很有用——但前提是你知道如何解释它。
深入研究之前:如果您以前没有遇到过 t-SNE
,那么您需要了解它背后的数学知识。其目标是在高维空间中获取一组点,并在低维空间(通常是 2D 平面)中找到这些点的表示。该算法是非线性的,并适应底层数据,对不同区域执行不同的转换。这些差异可能是造成混乱的主要来源。
t-SNE
的第二个特征是可调整的参数,perplexity
,它说明了如何在数据的局部和全局之间平衡注意力。从某种意义上说,该参数是对每个点的近邻数量的猜测。perplexity
值对生成的图片有复杂的影响。
原论文说,“SNE的性能对
perplexity
的变化相当稳健,典型值在 5 到 50 之间。”
充分利用 t-SNE
可能意味着需要分析具有不同 perplexity
的多个图。
例如,t-SNE
算法并不总是在连续运行中产生类似的输出,并且还有与优化过程相关的超参数。
1. 超参数
超参数的重要性
让我们从 t-SNE
的“hello world”开始:由两个相隔很远的 ``clusters
组成的数据集。为了尽可能简单,我们将考虑二维平面中的cluster
,如下左图所示。(为了对比,两个cluster
采用不同的颜色表示。)右下图显示了五种不同 perplexity
的 t-SNE
图。
van der Maaten 和 Hinton 建议的 perplexity
在 (5 - 50) 范围内,这些图确实显示了这些 ``clusters
,尽管形状非常不同。在这个范围之外的结果变得有点奇怪。对于 perplexity
= 2,局部变化占主导地位。 perplexity
=100 的图像表明:为了使算法正常运行,perplexity
应该小于点的数量。否则,可能会产生意想不到的结果。
上面的每个图都是用 5,000 次迭计算作的,学习率(通常称为epsilon
)为 10,并且在第 5,000 步时结果趋于稳定。
Step 值有多大的影响呢?根据我们的经验,最重要的是继续迭代,直到趋于稳定。
上面的图像显示了在 perplexity
=30 下的五次不同的运行。前四次在稳定之前停止。在 10、20、60 和 120 步之后,您可以看到具有看似一维甚至点状图像的``clusters
布局。如果您看到具有奇怪“挤压”形状的 t-SNE
图,则该过程可能过早停止。不幸的是,没有一个固定的Step
值可以产生稳定的结果。不同的数据集可能需要不同数量的迭代才能收敛。
另一个问题是使用相同超参数的不同运行是否会产生相同的结果。在这个简单的两个簇示例以及我们讨论的大多数其他示例中,多次运行给出了相同的全局形状。然而,某些数据集在不同的运行中会产生明显不同的结果;稍后我们将给出其中之一的示例。
从现在开始,除非另有说明,否则我们将展示 5,000 次迭代的结果。这通常足以使本文中的(相对较小的)示例收敛。然而,我们将继续展示一系列的perplexities
,因为这似乎在每种情况下都有很大的不同。
2. 簇
t-SNE
图中的cluster
(簇)大小没有任何意义
如果两个 cluster
有不同的标准差,大小也不同呢?(尺寸是指边界框测量值,而不是点数。)下面是平面上混合高斯的 t-SNE
图,其中一个的分散情况是另一个的 10 倍。
令人惊讶的是,这两个 cluster
在 t-SNE
图中看起来大致相同。t-SNE
算法使其“距离”适应数据集中的区域密度变化。结果,它自然地扩展了密集的 cluster
,并收缩了稀疏的 cluster
,从而平衡了 cluster
的大小。需要明确的是,这与任何降维技术都会扭曲距离的情况不同。相反,密度均衡是通过设计产生的,并且是 t-SNE
的可预测特征。
然而,您无法在 t-SNE
图中看到 cluster
的相对大小。
3. 距离
cluster
之间的距离可能没有任何意义
下图显示了三个高斯,每个 50 点,一对的距离是另一对的 5 倍。
perplexity
为 50 时,该图很好地显示了全局情况。对于较低的 perplexity
,cluster
看起来是等距的。当 perplexity
为 100 时,我们可以看到全局形状很好,但其中一个 cluster
错误地出现,比其他 cluster
小得多。因为 perplexity
=50 在这个例子中得到的结果很好,如果我们想看到全局情况,我们可以总是将 perplexity
设置为 50 吗?
结果是不能。如果我们向每个cluster
添加更多点,则必须增加perplexity
以进行补偿。这是三个高斯cluster
的 t-SNE
图,每个cluster
有 200 个点,而不是 50 个。现在,没有一个perplexity
给出了好的结果。
想要看到全局情况需要微调perplexity
,这是个坏消息。真实的数据可能会有多个具有不同数量元素的cluster
。可能没有一个 perplexity
值可以捕获所有cluster
的距离——遗憾的是,perplexity
是一个全局参数。解决这个问题可能是未来研究的一个方向。
因此, t-SNE
图中cluster
之间的距离可能毫无意义。
4. 随机噪声
随机噪声并不总是看起来随机。
当你看到噪音时,识别它是一项关键技能,但需要时间来建立正确的直觉。t-SNE
的一个棘手之处在于它抛弃了很多现有的直觉。下图显示了真正的随机数据,从 100 维的单位高斯分布中抽取 500 个点。左图是前两个坐标的投影。
perplexity
=2 的情节似乎显示出戏剧性的cluster
。如果您正在调整perplexity
以显示数据的结构,您可能会认为自己中了大奖。
当然,因为我们知道点云是随机生成的,所以它没有统计上有趣的cluster
:那些“cluster
”没有意义。如果您回顾前面的示例,低perplexity
通常会导致这种分布。将这些团块识别为随机噪声是阅读 t-SNE
图的重要部分。
起初,perplexity
=30 图看起来根本不像高斯分布:云的不同区域之间只有轻微的密度差异,而且这些点似乎是均匀分布的。事实上,这些特征说明了关于高维正态分布的有用信息,它们非常接近球体上的均匀分布,点之间的间距大致相等。从这个角度来看,t-SNE
图比任何线性投影都更准确。
5. 形状
有时你可以看到一些形状
很少有数据以完美对称的方式分布。我们来看一个 50 维的轴对齐高斯分布,其中坐标 i 的标准差为 1/i
。也就是说,我们正在查看一个长椭圆形的点云。
对于足够高的perplexity
,细长的形状很容易阅读。另一方面,在低perplexity
度下,局部效应和无意义的“聚集”占据中心位置。更极端的形状也出现了,但同样只是在正确的perplexity
中。例如,这里有两个 75 个点的 2D 聚类,它们以平行线排列,带有一点噪音。
对于一定范围的perplexity
,长cluster
看起来接近正确。
然而,即使在最好的情况下,也存在细微的失真:t-SNE
图中的线条略微向外弯曲。原因像往常一样,t-SNE
倾向于扩展更密集的数据区域。由于簇的中间比末端周围的空白空间少,因此算法会放大它们。
6. 拓扑
对于拓扑,您可能需要多次绘图
有时您可以从 t-SNE
图上读取拓扑信息,但这通常需要多个perplexity
的视图。最简单的拓扑属性是包容性。下图显示了 50 维空间中的两组 75 个点。两者都是从以原点为中心的对称高斯分布中采样的,但其中一个的分散度是另一个的 50 倍。 “小”分布实际上包含在大分布中。
perplexity
=30 视图正确显示了基本的拓扑情况,但 t-SNE
再次夸大了较小点组的大小。在perplexity
=50 处:外部组变成了一个圆圈,因为该图试图描绘它的所有点与内部组的距离大致相同。如果你单独看这张图片,很容易将这些外点误读为一维结构。
考虑一组点,这些点在三个维度上追踪一个链接或一个结。再一次,查看多个perplexity
值给出了最完整的画面。低perplexity
给出两个完全独立的循环;高的显示了一种全球连通性。
trefoil knot
是一个有趣的例子,说明了多次运行如何影响 t-SNE
的结果。下面是 perplexity
为 2 时的五次运行结果。
该算法至少保留了原本的拓扑结构。但是其中的三个得到了不同的结果。使用点颜色作为对比,您可以看到第一次和第三次运行彼此相距很远。
然而,在 perplexity
=50 的五次运行结果(直到对称)在视觉上是相同的。
总结
t-SNE
如此受欢迎是有原因的:它非常灵活,并且经常可以找到其他降维算法无法找到的结构。不幸的是,这种灵活性使其难以解释。在用户看不见的地方,该算法会进行各种调整以整理其可视化。好消息是,通过研究 t-SNE
在简单情况下的表现,可以对研究有一定帮助。
参考资料
PDF: http://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf
[2]
Source: https://distill.pub/2016/misread-tsne/
本文由 mdnice 多平台发布
t-SNE:如何理解与高效使用相关推荐
- 通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏)
作者:Maciej Cieslar 译者:前端小智 来源: dev 你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub:https://github.com/qq449245884/ ...
- 本周六与您相约 | 计算未来轻沙龙:让机器拥有理解语言的能力
国庆长假转眼就过去了 你是不是死活找不回学习状态? 惊闻!有人在你畅饮肥宅快乐水之际 已经默默投出了又一篇论文-- 短短短的假期,也在不停赋能充电 怎么样,是不是有点心慌? 要是还不足以帮你克服长假综 ...
- 华为云DevCloud为开发者提供高效智能的可信开发环境
在HUAWEI CONNECT 2019期间,在华为云云服务开发者分论坛上,华为云布道师做了<CloudIDE:开发者的高效.智能的可信开发环境>专题演讲,主要介绍了华为云DevCloud ...
- 万万没想到:用理工科思维理解世界
万万没想到:用理工科思维理解世界 万万没想到用理工科思维理解世界 序言 Part one人性 别想说服我 真理追求者 坏比好重要 最简单概率论的五个智慧 序言 长辈说:人到老年,看书看皮儿,看报看题儿 ...
- 读书笔记---《如何高效学习》
学习是需要方法的,特别是在当今信息爆炸的时代,如何高效的处理信息.有机的整合知识,已经成为学习的关键.如果只用一种方式了解某样事物,你就不会真正了解她,了解事物真正含义的秘密取决于如何将其与我们所了解 ...
- 读书笔记 如何高效学习
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 学习是需 ...
- 高中计算机高效课堂和有效教学模式论文,高效课堂教学模式
"三模六环"自主学习教学模式是杜郎口中学推出的高效课堂教学模式.所谓三模是指自主学习的三大模块,即预习.展示.反馈.六环是指自主学习的六大环节,即预习交流.明确目标.分组合作.展现 ...
- 编写高效的软件缺陷报告
测试工程师需要利用对需求的理解.高效的执行力以及严密的逻辑推理能力,迅速找出软件中的潜在缺陷,并以缺陷报告的形式递交给开发团队,这看起来是不是有点像侦探柯南呢. 缺陷报告是测试工程师与开发工程师交流沟 ...
- 阅读_分享成为高效程序员的7个重要习惯
Tags:优化编程,把工作当真,理解代码,理解需求,高效程序员 作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友. ...
最新文章
- 【CyberSecurityLearning 67】Metasploit(MSF)
- Java快速生成20亿数字_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
- 周至四中计算机老师,周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”...
- vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼
- 搭建DNS主、从服务实验
- 2021年阿里云采购季大促主会场全攻略
- java 高级泛型_java泛型的高级应用
- 通信原理matlab实验课程设计,通信原理matlab课程设计报告
- bootstrap-面板
- web3sdk 怎么配置连接区块链节点
- oracle 创建表同时添加注释
- 上验证cudnn是否安装成功_ubuntu18.04 安装cuda、cudnn、tensorflow和pytorch其实很简单...
- 简单git用ssh方式下载代码
- uibot自动登陆163邮箱发送邮件
- 照片视频制作软件哪个好?自动生成酷炫效果,3步快速搞定!
- 大家知道老中医化妆品祛痘效果怎么样吗?
- Zabbix系列:设置动态监控告警时间范围
- UHS-I SD/miroSD接口速率速查表
- tiny6410刷机教程
- 大型网站之存储瓶颈(数据库的垂直拆分)
热门文章
- oracle 报ORA-01840 错误,原因是脏数据
- tomcat如何增大并发_tomcat最大线程数,单台tomcat最大并发量
- 使用Verilog语言实现时间计数器
- 亚信安全服务器深度安全防护系统怎么样,亚信安全服务器深度安全防护系统即服务(DSaaS)为云端用户筑起安全壁垒...
- 外网映射nginx端口丢失问题解决
- 2022-09-09 STM32 Jlink SWD接口SEGGER J-Flash烧录调试记录
- Anaconda3 2021.05(64bit)安装图文教程
- 【Vue项目搭建】修改【若依框架】的侧边栏、导航栏、面包屑样式、修改全局页面样式
- nextjs 错误日志收集
- 机器学习教程 之 半监督学习 Tri-training方法 (论文、数据集、代码)