【问题标题】:Efficient clustering algorithm for nearly uniformly distributed data用于几乎均匀分布的数据的高效聚类算法
【发布时间】:2016-09-12 16:59:02
【问题描述】:

我正在使用自然语言处理,并且正在尝试对新闻文章标题进行聚类。我把标题变成了向量,但它们几乎是均匀分布的。有 2-3 篇新闻文章的小集群,但大多数新闻文章应该在自己的集群中。

我尝试使用 k-means,但文章很少更改聚类,因为数据相当统一。最初的随机簇最终成为最终的簇。

我尝试了凝聚聚类,它适用于小型数据集(几百篇文章)。但是,这需要很长时间,因为它至少是 O(n^2)。

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

例如,如果我的数据是一组实数,它可能如下所示:

1 2 3 4 4.1 5 6

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

【问题讨论】:

  • 聚类统一数据是不是矛盾?
  • 如果您的数据“几乎一致”,那么 i) 没有集群,并且 ii) 您在预处理中做错了。文本不应该是统一的,而是 Zipf 分布的。对于此类数据,k-means 也是一个非常糟糕的选择——它不允许噪声(没有集群中的文章)。
  • 我所说的几乎统一的意思是没有明显的分区可以拆分所有数据。由于 k-means 用于对数据进行分区,因此它不适用于我的数据。有明显小于 5 个节点的小集群,但应该有比 O(n^2) 更好的方法来找到这些集群。

标签: algorithm machine-learning nlp cluster-analysis


【解决方案1】:
  1. 对数据进行排序。
  2. 选择阈值(参见步骤 4)
  3. 遍历您的数据
  4. 如果当前值与当前集群的第一个值的差值小于阈值,则将它们放入同一个集群,否则启动一个新的集群。

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

【讨论】:

  • O(n log n) 具有 非常 低常数因子,因为排序优化得非常好。如此有效,它与其他线性程序一样好。
  • 我将我的文章表示为 n 维单位向量,其中 n 通常为几千。排序会有所帮助吗?我猜我应该按第一个维度排序,然后是第二个维度,依此类推。
  • 如果您有很多维度,排序将无济于事。您的示例使我认为您可以将问题简化为一维。
  • @Linksku:“按第一个维度排序,然后是第二个维度,依此类推”:你不能那样做。
猜你喜欢
  • 2021-02-05
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2011-12-05
  • 1970-01-01
  • 2018-02-06
  • 2013-08-21
相关资源
最近更新 更多