我有一套5000万个文本片段,我想从中创建一些群集。维度可能介于60k到100k之间。平均文本片段长度为16个字。可以想象,频率矩阵非常稀疏。我正在寻找一个软件包/ libray / sdk,它可以让我找到那些集群。我过去曾尝试过CLUTO,但这对CLUTO来说似乎是一项非常繁重的任务。从我在网上的研究中我发现BIRCH是一种可以处理这些问题的算法,但不幸的是,我找不到任何在线BIRCH实现软件(我只发现了一些特殊的实现,比如分配项目,缺少任何任何文件)。有什么建议吗?
答案 0 :(得分:3)
您可能有兴趣查看使用TopSig表示的Streaming EM-tree算法。两者都来自我的博士学位。关于大规模文档聚类主题的论文。
我们最近在一台16核计算机(http://ktree.sf.net)上聚集了7.33亿个文档。索引文档需要大约2.5天,集群文件需要15个小时。
可以在https://github.com/cmdevries/LMW-tree找到流式EM树算法。它适用于由TopSig生成的二进制文档向量,可以在http://topsig.googlecode.com找到。
我早些时候在http://chris.de-vries.id.au/2013/07/large-scale-document-clustering.html撰写了一篇关于类似方法的博客文章。但是,EM-tree可以更好地进行并行执行,也可以生成质量更好的集群。
如果您有任何疑问,请随时通过chris@de-vries.id.au与我联系。
答案 1 :(得分:1)
我的教授用Java编写了implementation BIRCH算法。通过一些内联注释很容易阅读。
答案 2 :(得分:0)
使用图分区算法尝试。它可以帮助您对高维数据进行聚类。
答案 3 :(得分:0)
我想你更喜欢all-pairs搜索。
这将为您提供高达所需阈值的类似记录对。您可以使用图形理论的比特来提取集群 - 将每一对视为边缘。然后提取连接的组件将为您提供类似单链接聚类的东西,clique将为您提供完整的链接聚类。
我刚刚找到了BIRCH in C++的实现。