【问题标题】:Clustering with unknown number of clusters in Spark在 Spark 中使用未知数量的集群进行聚类
【发布时间】:2020-12-16 05:27:46
【问题描述】:

我有一个非常大的短信数据集(大约 350 万)。我正在使用 tf-idf 向量来表示此数据集中的每条消息。我想将同一主题的消息聚集在一起,我不知道实际的集群,甚至不知道它们的数量。

所以我搜索了一下,发现 Optics、DBSCAN 或 HDBSCAN 可以完成这项工作,但没有它们的实现是 spark ml 或 mllib。根据this在sparkmllib中有K-meansGaussian mixturePower iteration clustering (PIC)Latent Dirichlet allocation (LDA)Bisecting k-meansStreaming k-means的实现。

所以我的问题是,它们都需要 K 作为输入,而我没有。 Spark 中是否有任何聚类算法可以自行查找聚类数量?

【问题讨论】:

  • 听起来更像是groupBy topoic 要求,而不是集群要求。为什么要将此作为聚类问题来解决?尺寸是多少?
  • @PubuduSitinamaluwa 那么有没有办法按未知主题对这些数据集进行分组? tf-idf向量的维度很高,向量很稀疏

标签: apache-spark k-means apache-spark-mllib


【解决方案1】:

评论有点太长了。我会在这里解释一下。

你有消息属于哪个主题的数据吗?然后,您可以简单地按该主题进行分组,以将具有相似主题的所有消息分组。

这是一回事。如果您尝试从数据集本身导出主题 (K),那么您需要更多的统计数据来构建一个健全的特征集来对它们进行聚类。然后你可以通过改变它来得出关于 K 的结论,并以最小的误差找到最好的 K。有一个著名的方法叫做elbow method

看看这个。 https://www.geeksforgeeks.org/ml-determine-the-optimal-value-of-k-in-k-means-clustering/#:~:text=There%20is%20a%20popular%20method,fewer%20elements%20in%20the%20cluster.

【讨论】:

  • 感谢您的回答。不,我没有消息主题,这正是我想要的。我认为肘部不足以解决我的问题,因为主题的数量可能非常多
  • 嗯,您可以将 k 从 1 到您拥有的数据点数 (n)。我没有这样做,只是一个想法。如何使用分而治之?从假设 k=100、n/2、n/4、3n/4 开始。
  • 数据点数为 3.5M。我认为这不是正确的解决方案
  • 取决于您的火花簇。数据点的数量可能不是影响性能的重要因素。但大小是。抱歉,我没能按预期为您提供帮助。
猜你喜欢
  • 2019-11-26
  • 2018-03-19
  • 2019-01-27
  • 2012-04-25
  • 2015-01-16
  • 2016-06-04
  • 2017-11-01
  • 2017-03-07
  • 2018-01-12
相关资源
最近更新 更多