1

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

我使用 t-SNE 已经有一段时间了,以前只在小于 1000 个数据点的较小数据集上使用它,其中建议的5-50van der Maaten 和 Hinton)的困惑度足以显示底层数据结构。

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

有没有人有在具有大量数据点(> 100k)的数据集上设置最佳困惑度的经验?

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

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

谢谢你的帮助

4

1 回答 1

0

很大程度上这是经验性的,所以我建议只玩价值观。但是我可以分享我的经验...

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

openTSNE实现要快得多,并提供了一个有趣的指南,说明如何在算法的同一运行的不同阶段使用更小更大的困惑值,以获得两者的优势。粗略地说,它所做的是启动具有高困惑度的算法以找到少量步骤的全局结构,然后重复具有较低困惑度的算法。

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

于 2020-10-09T17:13:54.590 回答