聚类大量非常小的集群,其中大多数数据不相关

数据挖掘 聚类 阿帕奇火花
2021-10-08 01:07:01

我正在尝试在大约 34k 个不同项目的数据集中检测重复项。当我说“重复”时,我并不是指相同的项目,只是非常相似。我有一个算法,它将笛卡尔加入项目并返回相似项目的稀疏矩阵,相似度从 0.0 到 1.0。这个矩阵有大约 5k 个非零条目,所以它非常稀疏。

我已经知道成对的相似物品是什么。我需要的是一种将它们聚集在一起的好方法。我预计会有很多集群中只有 2 个项目,并且有几千个集群有 2 个以上的项目,绝大多数项目是非集群的。

是否有适合这种情况的聚类算法?我已经尝试了几个,但它们要么效果不佳,要么设计时考虑到了几个大集群而不是许多小集群,因此往往会崩溃。

聚类是错误的方法吗?

我正在使用 Spark,但稀疏矩阵足够小,我不介意在必要时导出到其他东西。

2个回答

在这个数据大小下,您仍然可以使用层次聚类。

当相似度太低时,您可以提前停止聚类。

但是所有这些方法都非常低效。正确的方法是根本不使用聚类。相反,使用相似性搜索或例如 minhash。

聚类在这里似乎不是正确的方法。在 Anony-Mousse 之后,相似矩阵似乎也不正确。Locality Sensitive Hashing(即 minhash)是对所有相似项目进行分组的好方法。

创建和搜索相似度矩阵的效率要低得多(您正在计算 (n2)对),所以我建议直接使用 LSH 而不是生成矩阵。这将根据您的需要对相似的项目进行分组。