无监督聚类高维数据没有对 K 的估计

数据挖掘 Python 聚类 降维
2022-03-12 18:25:02

我有一个包含 500 个特征的 50K 记录的数据集(所有数字)。我们正在努力寻找指纹。这意味着我们希望对数据进行聚类并将每个集群中的一个节点报告为该集群的代表(这意味着与其他集群中的任何其他节点相比,该集群中的每个节点都与该代表最相似)。所以我们不会有任何噪音(意味着所有节点都应该被表示)。我做过 K-means、Kmedoids、hierarchical、dbscan、hdbscan 等。每个都有自己的问题。

  1. Kmeans 不会将其中一个节点报告为集群的中心,而是报告可能不是我们节点之一的中心点。所以我们切换到 Kmedoids。结果过于依赖初始种子。不知道 K 也是另一个问题。

  2. 然后我们用肘法求K。但由于不确定K的上限是多少,所以情节不是很肘,更像是逐渐减小。然后我们尝试了 Sillouette0score 方法,我得到的集群数字太大了(超过 200 个,这对现场专家来说似乎不合适)。由 Affinity Propagation 生成的 K 的数量也存在同样的问题(K 太大)。

  3. 由于我们有数以万计的数据,Meanshift 不能正常工作。HDBSCAN 还报告了 264 个标签,这又似乎不合理。

我想为此数据尝试一些降维方法。但不确定什么会运作良好。tSNE 过于专注于可视化,这似乎不适合我们使用。任何建议将不胜感激。

1个回答

我先指出几点:

  • 您有一个无人监督的问题,因此首先要知道的是不要搜索The Right Answer没有正确的答案,您会根据一些预定义的标准来尽力而为!
  • 不知道 K 是另一个问题:这是无监督学习中许多没有答案的问题之一!所有这些方法,如肘部,都只是启发式方法。
  • Kmeans 不会将其中一个节点报告为集群的中心:可以修改 K-Means 来这样做。最简单的技巧是从数据点中找到最终代表的最近邻,并将它们设置为集群的代表。
  • 您提到的一些方法(例如 K-Means 和 Sillouette)假设为高斯集群。如果您的集群没有正确紧凑且分离良好,那么它们会误导您。

在这些之后,让我们看看你的问题。尝试使用可视化技术深入了解您的数据。tSNE 对其参数非常敏感,需要更多调查。从 PCA、KPCALLE开始了解数据。如果他们没有给你一个正确的嵌入,那就去UMAPUMAP 对参数也很敏感,但低于 tSNE,而且速度更快。如果它发现任何对你的工作有利的东西,它会给你更紧凑的集群。最后,如果它们都不起作用,可以尝试调整 tSNE 参数,看看是否能找到一个好的嵌入。

在 UMAP 或 tSNE 之上,您可以尝试聚类算法,这将是解决您问题的逻辑管道。

祝你好运!