t-SNE的问题在于它不保留距离或密度。它仅在某种程度上保留了最近的邻居。差异是细微的,但会影响任何基于密度或距离的算法。
要查看此效果,只需生成多元高斯分布。如果将其可视化,您将得到一个密集的球,向外的密度要小得多,有些离群值可能真的很远。
现在,对此数据运行t-SNE。通常,您会得到一个密度相当均匀的圆。如果您使用较低的困惑度,则其中甚至可能会有一些奇怪的模式。但是,您再也无法真正区分异常值了。
现在让事情变得更复杂。让我们在(-2,0)的正态分布中使用250点,在(+2,0)的正态分布中使用750点。
假设这是一个简单的数据集,例如EM:
如果我们使用默认困惑度为40的t-SNE运行,则会得到一个奇怪的图案:
还不错,但是还不那么容易集群,是吗?您将很难找到一种完全可以按需在此处工作的聚类算法。即使您要求人类对这些数据进行聚类,他们很可能会在这里找到两个以上的聚类。
如果我们以太小的困惑度(例如20)运行t-SNE,我们将获得以下不存在的更多模式:
例如,这将与DBSCAN一起群集,但是将产生四个群集。因此请注意,t-SNE会产生“假”图案!
对于该数据集,最佳困惑似乎在80左右。但我认为此参数不适用于所有其他数据集。
现在,这在视觉上是令人愉悦的,但对于分析而言却不是更好。人工注释者可能会选择剪切并获得不错的结果。但是,即使在这种非常简单的情况下,k均值也会失败!您已经知道密度信息丢失了,所有数据似乎都生活在几乎相同密度的区域中。如果相反,我们将进一步增加困惑度,则均匀性将增加,而分离度将再次降低。
总之,请使用t-SNE进行可视化(并尝试使用不同的参数以使视觉上令人愉悦!),而不是事后不要进行聚类,尤其是不要使用基于距离或密度的算法,因为此信息是有意的(!)丢失。基于邻域图的方法可能很好,但是您不必事先先运行t-SNE,只需立即使用邻居即可(因为t-SNE试图使该nn-图在很大程度上保持完整)。
更多例子
这些示例是为介绍论文而准备的(但是在论文中找不到,因为我稍后会进行此实验)
Erich Schubert和Michael Gertz。
用于可视化和离群值检测的内在t随机邻居嵌入-对维数诅咒的补救措施?
在:第十届国际相似性搜索和应用会议(SISAP)会议录,德国慕尼黑。2017年
首先,我们有以下输入数据:
您可能会猜到,这是为孩子们制作的“给我着色”图像。
如果我们通过SNE(不是t-SNE,而是前身)运行此命令:
哇,我们的鱼成了海怪!由于内核大小是在本地选择的,因此我们会丢失很多密度信息。
但是您会为t-SNE的输出感到惊讶:
我实际上已经尝试了两个实现(ELKI和sklearn实现),并且都产生了这样的结果。一些不连续的片段,但是每个看起来都与原始数据有些一致。
有两个要点可以解释这一点:
SGD依赖于迭代优化过程,并且可能会陷入局部最优状态。尤其是,这使算法很难“翻转”它已镜像的部分数据,因为这将需要移动点通过其他应该分开的点。因此,如果鱼的某些部分被镜像,而其他部分未被镜像,则可能无法修复该问题。
t-SNE使用投影空间中的t分布。与常规SNE使用的高斯分布相反,这意味着大多数点将互相排斥,因为它们在输入域中的亲和力为0(高斯迅速变零),但在输出域中的亲和力> 0。有时(如MNIST),这使可视化效果更好。特别是,它可以比输入域中更多地帮助“拆分”数据集。这种额外的排斥力通常还导致点更均匀地使用该区域,这也是理想的。但是在此示例中,排斥作用实际上导致鱼的碎片分离。
我们可以通过使用原始坐标作为初始放置而不是随机坐标(通常与t-SNE一起使用)来帮助(在此玩具数据集上)第一个问题。这次,图像是sklearn而不是ELKI,因为sklearn版本已经具有传递初始坐标的参数:
如您所见,即使初始位置“完美”,t-SNE也会在最初连接的多个位置“破坏”鱼类,因为输出域中的Student-t排斥力比输入中的高斯亲和力强空间。
如您所见,t-SNE(也包括SNE!)是有趣的可视化技术,但需要谨慎处理。我宁愿不对结果应用k均值!因为结果将严重失真,并且距离和密度都无法很好地保留。而是将其用于可视化。