使用更大的数据集> 300k数据点获得t-SNE的最佳困惑性

问题描述

我正在使用t-SNE从更高维度的数据集(在本例中为30维)中进行可视化的2D投影,我对困惑度超参数有疑问。

自从我使用t-SNE以来,已经有一段时间了,以前我只在较小的数据集 5-50 (van der Maaten and Hinton足以显示基础数据结构。

当前,我正在处理一个包含340,000个数据点的数据集,并认为由于困惑度会影响数据的本地表示形式与非本地表示形式,因此更多数据点所需要的困惑度要远远高于50(特别是如果数据为在高维空间中不高度隔离)。

对于在具有大量数据点(> 100k)的数据集上设置最佳困惑度的人,是否有任何经验?

我真的很想听听您的经验以及您将使用哪种方法来确定最佳困惑度(或最佳困惑度范围)。

一篇有趣的文章表明,最佳困惑度遵循简单的幂定律(~N^0.5),想知道其他人对此有何看法?

感谢您的帮助

解决方法

从很大程度上讲,这是经验性的,因此我建议您只是在玩弄值。但是我可以分享我的经验...

我有一个大约40万条记录的数据集,每个记录约70个维度。我重新运行了scikit Learn,以困惑度值为5、15、50、100的tsne的实现,我注意到集群在50之后看起来是一样的。我收集到5-15太小了,50就足够了,增加的困惑并没有使差异很大。那个运行时间不过是一场噩梦。

openTSNE的实现要快得多,并且为如何在算法的同一轮次的不同阶段使用较小的困惑度提供了有趣的指南,以便获得两者的优点。松散地说,它的工作是启动高复杂度的算法以找到少量步骤的全局结构,然后以较低的复杂度重复该算法。

我在150万条记录的数据集中使用了此实现,记录的维度约为200。数据来自与我提到的第一个数据集相同的源系统。我在这里没有使用困惑值,因为在32 cpu vm上的总运行时间为几个小时,但是群集看起来与较小的数据集(重新创建的具有二进制分类功能的不同群集)非常相似,所以我很高兴。