【问题标题】:Clustering huge vector space聚类巨大的向量空间
【发布时间】:2010-12-05 02:45:07
【问题描述】:

我正在做一些测试,对大量非常大的稀疏向量进行聚类,这些向量表示各种超文本文档的词频逆文档频率。考虑到数据集的比例,你建议用什么算法来聚类这些数据?向量的维度将 > 3·105 并且向量的数量可能在 109 左右。我看过 dbscan 和光学算法。集群的数量是未知的。而且如此高维的空间索引似乎很复杂。

【问题讨论】:

    标签: algorithm cluster-analysis


    【解决方案1】:

    K-means 或期望最大化算法计算在高维度的大型数据集上非常昂贵。此处的文章描述了使用树冠聚类的高效预聚类:

    Efficient clustering of high-dimensional data sets with application to reference matching

    通常,标准 K-means 或 EM 的二次时间复杂度对于大数据而言效率不高,并且对于不断增长的数据集具有很好的可扩展性。而不是我会找出时间复杂度为 O(n) 或 O(n*log(n)) 的算法。

    K-means 也不能保证全局收敛,而是收敛到局部最小值。 EM 总是收敛到全局最小值。 EM 也可以从数学上派生自 K-means 作为其概率变体。

    【讨论】:

      【解决方案2】:

      在对数据进行聚类时,我总是会按以下顺序至少尝试这两种算法:

      1. K-Means:尝试尽可能多地调整结果。如果您可以让 K-Means 为您工作并提供不错的结果,那么您几乎肯定不会在使用任何其他算法时做得更好。

      2. 期望最大化:K-means 算法实际上被开发为 EM 算法的廉价且良好的替代方案。 EM 算法理解起来更复杂,计算成本也更高,但 EM 的结果非常好。您可以了解更多关于 EM http://en.wikipedia.org/wiki/Expectation-maximization_algorithm 的信息。 EM 有一个 OpenCv 实现:http://opencv.willowgarage.com/documentation/expectation-maximization.html

      如果这两个结果都不令人满意,我会开始寻找其他地方,但不会,除非你都尝试过。

      【讨论】:

      • K-Means 不是 EM 的一个实例吗?
      • @bayer:不,如果这就是你的意思,它们肯定不是同一个算法。 K-Means 是非参数的,但 EM 是(意味着 EM 断言数据存在潜在的多变量高斯分布,如果考虑中心极限定理,这不是一个非常严格的假设。)据我所知,EM算法有时会被归类为元算法,而其他算法则属于它。从我所见,它实际上可以独立实施。
      【解决方案3】:

      决策树因在高维空间中高效工作而广受欢迎。查看Clustering Via Decision Tree Construction

      另外,Randomized Forests 是非常高效的学习者,如果你想玩,OpenCV implementation exists

      【讨论】:

        【解决方案4】:

        听说semantic hashing 取得了优异的成绩。然而,深度信​​念网很难实现。您可能想尝试最小散列(虽然这是一种概率方法)或locality sensistive hashing for euclidean spaces

        一般来说,由于维度灾难以及大多数项目彼此之间的距离相似的事实,在如此高维空间中进行聚类是很困难的。如果您事先通过 SOM 或 PCA 降低维度,则 K-Means 等标准方法可能会起作用。

        【讨论】:

        • 感谢您提供有趣的链接。
        【解决方案5】:

        使用简单的 K-means 聚类获得的结果几乎与其他任何方法一样好,而且它肯定比大多数替代方法更快。我也通过成对聚集获得了不错的结果,但速度要慢一些。对于 K-means,您确实必须从一些估计的集群数量开始,但您可以在进行过程中通过算法对其进行调整。如果您发现两个聚类的均值过于接近,则可以减少聚类的数量。如果您发现变异范围过大的集群,您可以尝试更多集群。我发现 sqrt(N) 是一个合理的起点——但我通常从 10^7 个文档而不是 10^9 个文档开始。对于 10^9,稍微减少它可能是有意义的。

        但是,如果由我来决定,我会非常努力地考虑从使用 Landmark MDS 之类的东西降低维度开始,然后进行聚类。

        【讨论】:

        • K-Means 应该始终是您尝试对任何事物进行聚类时尝试的第一个分割技术。简单、高效,并且在大多数情况下都能提供出色的结果。唯一的缺点是必须选择适当的 K 值。您始终可以尝试增加 K 的序列来计算集群间方差,作为集群质量的标准。然而,这在实践中效果并不好。
        猜你喜欢
        • 2018-12-26
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 2013-01-10
        相关资源
        最近更新 更多