您应该尝试一下ELKI中的聚类算法。很抱歉如此无耻地宣传我密切相关的项目。但它是以可比方式实现的最大的聚类和异常值检测算法集合。(如果您采用某些R 包中可用的所有聚类算法,您最终可能会得到更多算法,但由于实现差异,它们不会真正具有可比性)
基准测试显示同一算法的不同实现存在巨大的速度差异。请参阅我们的基准测试网站,了解即使在诸如 k-means 之类的简单算法上,性能也会有多少变化。
我们还没有 Canopy Clustering。原因是它更像是一个预处理索引,而不是一个聚类算法。有点像 M-tree 或 DBSCAN 聚类的原始变体。然而,我们希望看到一个贡献的树冠聚类作为这样的预处理步骤。
到目前为止,ELKI 处理字符串的能力也受到了一些限制。您可以很好地加载典型的 TF-IDF 向量,我们对稀疏向量类和相似函数进行了一些优化。不过,他们还没有完全利用 k-means 的稀疏性,而且也没有球形 k-means。但是,为什么不能期望稀疏向量上的 k-means 结果非常有意义,原因有很多。它更像是一种启发式。
但是,如果您可以尝试解决您的问题并报告您的经验,那将会很有趣。与您的实施相比,性能是否具有竞争力?我们希望看到用于文本处理的贡献模块,例如进一步优化的相似性函数,或球形 k-means 变体。
更新: ELKI 现在实际上包括 CanopyClustering:CanopyPreClustering(届时将成为 0.6.0 的一部分)。但截至目前,它只是另一种聚类算法,尚未用于加速其他算法,例如 k-means。我需要检查如何最好地将它用作某种索引来加速算法。如果您设置 T1=epsilon 和 T2=0.5*T1,我可以想象它也有助于加快 DBSCAN。CanopyClustering 恕我直言的最大问题是如何选择一个好的半径。