【发布时间】:2011-05-18 21:16:25
【问题描述】:
什么是最流行的文本聚类算法,它可以处理大尺寸和庞大的数据集并且速度很快? 在阅读了这么多论文和这么多方法后,我感到困惑..现在只想知道哪个最常用,以便为编写文档集群应用程序提供一个良好的起点。
【问题讨论】:
标签: cluster-analysis data-mining information-retrieval
什么是最流行的文本聚类算法,它可以处理大尺寸和庞大的数据集并且速度很快? 在阅读了这么多论文和这么多方法后,我感到困惑..现在只想知道哪个最常用,以便为编写文档集群应用程序提供一个良好的起点。
【问题讨论】:
标签: cluster-analysis data-mining information-retrieval
没有一刀切的方法。分层聚类始终是一种选择。如果您想从数据中形成不同的组,您可以使用 K-means 聚类(据说它的计算强度也较低)。
【讨论】:
我会坚持使用 kmedoids,因为您可以在算法开始时计算任意点到任意点的距离,您只需要这样做一次,它可以节省您的时间,特别是在有很多维度的情况下。该算法通过选择更接近它的点作为集群的中心来工作,而不是根据属于该集群的点的平均值计算的质心。因此,您已经在此算法中为您完成了所有可能的距离计算。
【讨论】:
要处理维度灾难,您可以尝试确定生成数据集的blind sources(即主题)。您可以使用Principal Component Analysis 或Factor Analysis 来降低特征集的维数并计算有用的索引。
PCA 是 Latent Semantic Indexing 中使用的,因为 SVD 可以证明是 PCA :)
请记住,当您获得数据集的主成分或其因子时,您可能会失去解释,因此您可能想走Non-Negative Matrix Factorization 路线。 (这里是重点!K-Means 是一种特殊的 NNMF!)在 NNMF 中,数据集可以仅通过其加性非负分量来解释。
【讨论】:
如果您不是在寻找语义文本聚类(我无法判断这是否是您原始问题的要求),请尝试使用 Levenshtein 距离并用它构建相似度矩阵。由此,您可以使用 k-medoids 进行聚类,然后通过使用轮廓系数来验证您的聚类。不幸的是,Levensthein 可能非常慢,但有一些方法可以通过使用阈值和其他方法来加快速度。
另一种处理维度灾难的方法是找到“对比集”,即在一组中比在其他组中更突出的属性-值对的连接。然后,您可以使用这些对比集作为维度来代替原始属性或使用有限数量的属性。
【讨论】:
两种最流行的文档聚类方法是层次聚类和k-means。 k-means 更快,因为它在文档数量上是线性的,而不是分层的,它是二次的,但通常被认为可以提供更好的结果。数据集中的每个文档通常表示为一个 n 维向量(n 是单词的数量),每个单词对应的维度大小等于其term frequency-inverse document frequency 分数。 tf-idf 分数降低了高频词在相似度计算中的重要性。 cosine similarity 通常用作相似度度量。
一篇比较分层和二等分k-means的实验结果的论文,k-means的表亲算法,可以找到here。
文档聚类中最简单的降维方法是:a) 丢弃所有稀有和高频率的词(比如出现在少于 1% 和超过 60% 的文档中:这有点武断,您需要尝试不同的每个数据集的范围以查看对结果的影响),b)stopping:丢弃常用英语单词的停止列表中的所有单词:可以在线找到列表,以及 c)stemming,或删除后缀以仅保留单词根。最常见的词干分析器是由 Martin Porter 设计的词干分析器。可以在here 找到多种语言的实现。通常,这会将数据集中唯一单词的数量减少到几百或几千,并且可能不需要进一步的降维。否则,可以使用 PCA 等技术。
【讨论】: