Answers:
我同意t-SNE是一种出色的算法,效果非常好,在当时是真正的突破。然而:
有人链接到这个非常流行的t-SNE缺点的帐户:https://distill.pub/2016/misread-tsne/(+1),但它只讨论了非常简单的玩具数据集,我发现它并不对应非常适合在实际数据上使用t-SNE和相关算法时在实践中面临的问题。例如:
我将在下面简要讨论这三个。
t-SNE通常无法保留数据集的全局结构。
考虑来自Allen研究所的这个单细胞RNA-seq数据集(小鼠皮层细胞):http : //celltypes.brain-map.org/rnaseq/mouse。它拥有约23k个单元。我们先验地知道,该数据集具有许多有意义的层次结构,这一点已通过层次聚类得到证实。有神经元和非神经细胞(神经胶质细胞,星形胶质细胞等)。在神经元中,有兴奋性神经元和抑制性神经元-两组截然不同。在例如抑制性神经元中,有几个主要组:表达Pvalb,表达SSt,表达VIP。在这些组中的任何一个中,似乎都有多个其他集群。这反映在分层聚类树中。但是,这是t-SNE,取自上面的链接:
非神经细胞为灰色/棕色/黑色。兴奋性神经元呈蓝色/深绿色/绿色。抑制性神经元呈橙色/红色/紫色。人们会希望这些主要群体团结在一起,但是这不会发生:一旦t-SNE将一个群体分成几个集群,它们最终可能会被任意安置。数据集的层次结构丢失。
我认为这应该是一个可解决的问题,但是尽管最近在这个方向上有一些工作(包括我自己的),但我不知道有任何原则上的良好发展。
当时,t-SNE往往会遭受“过度拥挤”的困扰
t-SNE在MNIST数据上效果很好。但是请考虑一下(摘自本文):
有了1百万个数据点,所有群集都聚集在一起(确切的原因还不是很清楚),而唯一已知的抵消平衡的方法是使用一些肮脏的骇客,如上所示。我从经验中知道,其他类似的大型数据集也会发生这种情况。
可以说,MNIST本身可以看到这一点(N = 70k)。看一看:
右边是t-SNE。左侧是UMAP,这是一种正在积极开发中的令人兴奋的新方法,与较旧的largeVis非常相似。UMAP / largeVis将群集拉得更远。确切的原因尚不清楚恕我直言;我想说的是,这里还有很多要理解的地方,可能还有很多需要改进的地方。
对于大型 Barnes-Hut运行时太慢
因此,这可能不再是一个悬而未决的问题,但是直到最近才出现,我想运行时还有进一步改进的空间。因此,工作肯定可以朝这个方向继续。
这是对运行t-SNE时更改参数如何影响一些非常简单的数据集的出色分析:http : //distill.pub/2016/misread-tsne/。通常,t-SNE在识别高维结构(包括比簇更复杂的关系)方面似乎做得很好,尽管这需要进行参数调整,尤其是困惑度值。
我仍然很想听听其他评论,但现在我将发布自己的答案,如我所见。在寻找更“实用”的答案时,值得一提的是t-sne的两个理论“缺点”。第一个问题较少,第二个绝对应该考虑:
t-sne成本函数不是凸函数,因此我们不能保证达到全局最优:其他降维技术(Isomap,LLE)也具有凸成本函数。在t-sne中不是这种情况,因此需要有效调整一些优化参数才能获得“良好”的解决方案。但是,尽管存在潜在的理论陷阱,但值得一提的是,在实践中这并不是一个下降,因为似乎即使t-sne算法的“局部最小值”也比其他方法的全局最小值要好(创建更好的可视化效果) 。
固有维数的诅咒:使用t-sne时要记住的一件事是本质上是多方面的学习算法。从本质上讲,这意味着t-sne(及其他此类方法)旨在在原始高维只是人为地高的情况下工作:数据具有固有的较低维。也就是说,数据“坐在”较低维的流形上。一个不错的例子是同一个人的连续照片:虽然我可以用像素数(高维)表示每个图像,但是数据的固有维数实际上是由点的物理变换(在这种情况下,头部的3D旋转)。在这种情况下,t-sne效果很好。但是,在固有维数很高或数据点位于变化很大的流形上的情况下,由于违反了最基本的假设-流形上的局部线性-,因此t-sne的性能预计会很差。
对于实际用户,我认为这意味着需要记住两个有用的建议:
执行可视化方法降维之前,总是试图首先弄清楚如果确实存在一个较低的特性维度你处理数据。
如果不确定1(通常也不确定),那么如原始文章所建议的,对从有效地表示大量变化的数据流形的模型获得的数据表示进行t-sne可能会很有用。非线性层,例如自动编码器”。因此,在这种情况下,自动编码器+ t-sne的组合可能是一个很好的解决方案。