2016-05-16 301 views
0

我在玩自然语言处理,并试图对新闻文章标题进行聚类。我将标题转换为矢量,但它们几乎均匀分布。有2-3个新闻文章的小集群,但大多数新闻文章应该在他们自己的集群。几乎均匀分布的数据的高效聚类算法

我试过使用k-means,但文章很少改变集群,因为数据是相当统一的。最初的随机簇最终成为最后的簇。

我尝试了凝聚式集群,它对于一个小数据集(几百篇文章)非常适用。然而,它需要很长时间,因为它至少是O(n^2)。

是否有任何有效的算法来聚类几乎均匀分布的数据?

例如,如果我的数据是一个实数集,它可能是这样的:

1 2 3 4 4.1 5 6

在这种情况下,该簇应该是:(1) ,(2),(3),(4,4.1),(5),(6)。 有没有更好的方法来做到这一点比凝聚聚类?

+1

与群集统一数据不矛盾吗? –

+0

如果你的数据“几乎一致”,那么i)没有聚类,和ii)你在预处理时做了错误。文本不应该是统一的,而是Zipf分发的。 k-means对于这样的数据也是一个非常糟糕的选择 - 它不允许噪音(没有群集中的文章)。 –

+0

我几乎统一的意思是没有明显的分区可以分割所有的数据。由于k-means被用来分割数据,所以在我的数据上效果不好。有明显的<5个节点的小群集,但应该有比O(n^2)更好的找到这些群集的东西。 –

回答

0
  1. 对数据进行排序。
  2. 选择一个阈值(见步骤4)
  3. 迭代通过数据
  4. 如果当前值和当前簇的第一值之间的差小于所述阈值时,把它们在同一个群集中,否则启动一个新的集群。

由于排序,这应该是O(n log n)。

+0

O(n log n)具有*非常低的常数因子,因为排序非常优化。如此有效地,它和其他线性程序一样好。 –

+0

我代表我的文章为n维单位向量,其中n通常是几千。将排序这个帮助吗?我猜我应该在第一个维度上排序,然后是第二个维度,依此类推。 –

+0

如果你有很多维度,排序不会有帮助。你的例子让我觉得你可以将问题简化为一个维度。 –