【发布时间】:2010-12-05 02:45:07
【问题描述】:
我正在做一些测试,对大量非常大的稀疏向量进行聚类,这些向量表示各种超文本文档的词频逆文档频率。考虑到数据集的比例,你建议用什么算法来聚类这些数据?向量的维度将 > 3·105 并且向量的数量可能在 109 左右。我看过 dbscan 和光学算法。集群的数量是未知的。而且如此高维的空间索引似乎很复杂。
【问题讨论】:
标签: algorithm cluster-analysis
我正在做一些测试,对大量非常大的稀疏向量进行聚类,这些向量表示各种超文本文档的词频逆文档频率。考虑到数据集的比例,你建议用什么算法来聚类这些数据?向量的维度将 > 3·105 并且向量的数量可能在 109 左右。我看过 dbscan 和光学算法。集群的数量是未知的。而且如此高维的空间索引似乎很复杂。
【问题讨论】:
标签: algorithm cluster-analysis
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 作为其概率变体。
【讨论】:
在对数据进行聚类时,我总是会按以下顺序至少尝试这两种算法:
K-Means:尝试尽可能多地调整结果。如果您可以让 K-Means 为您工作并提供不错的结果,那么您几乎肯定不会在使用任何其他算法时做得更好。
期望最大化:K-means 算法实际上被开发为 EM 算法的廉价且良好的替代方案。 EM 算法理解起来更复杂,计算成本也更高,但 EM 的结果非常好。您可以了解更多关于 EM http://en.wikipedia.org/wiki/Expectation-maximization_algorithm 的信息。 EM 有一个 OpenCv 实现:http://opencv.willowgarage.com/documentation/expectation-maximization.html
如果这两个结果都不令人满意,我会开始寻找其他地方,但不会,除非你都尝试过。
【讨论】:
决策树因在高维空间中高效工作而广受欢迎。查看Clustering Via Decision Tree Construction。
另外,Randomized Forests 是非常高效的学习者,如果你想玩,OpenCV implementation exists。
【讨论】:
听说semantic hashing 取得了优异的成绩。然而,深度信念网很难实现。您可能想尝试最小散列(虽然这是一种概率方法)或locality sensistive hashing for euclidean spaces。
一般来说,由于维度灾难以及大多数项目彼此之间的距离相似的事实,在如此高维空间中进行聚类是很困难的。如果您事先通过 SOM 或 PCA 降低维度,则 K-Means 等标准方法可能会起作用。
【讨论】:
使用简单的 K-means 聚类获得的结果几乎与其他任何方法一样好,而且它肯定比大多数替代方法更快。我也通过成对聚集获得了不错的结果,但速度要慢一些。对于 K-means,您确实必须从一些估计的集群数量开始,但您可以在进行过程中通过算法对其进行调整。如果您发现两个聚类的均值过于接近,则可以减少聚类的数量。如果您发现变异范围过大的集群,您可以尝试更多集群。我发现 sqrt(N) 是一个合理的起点——但我通常从 10^7 个文档而不是 10^9 个文档开始。对于 10^9,稍微减少它可能是有意义的。
但是,如果由我来决定,我会非常努力地考虑从使用 Landmark MDS 之类的东西降低维度开始,然后进行聚类。
【讨论】: