我阅读了关于如何根据文档相似度进行聚类的帖子,这里有相关讨论。但我仍然不明白它是如何实现的。我的测试是,我有10个文档的余弦相似度测量。以下是一些示例:
D1 D2 sim(D1,D2)d1 d10 0.6823 d1 d2 0.6377 d1 d8 0.0307 d1 d9 0.0294 d1 d7 0.0284 d1 d3 0.0234 d1 d4 0.0199 d1 d6 0.0110 d1 d5 0.0030 d10 d2 0.7232 d10 d3 0.3898 d10 d4 0.3054 d10 d9 0.0256 d10 d7 0.0227 d10 d8 0.0226 d10 d6 0.0110 d10 d5 0.0060 d2 d3 0.7850 ......
我可以仅根据这些相似度测量来聚类这些文档吗?如果我指定了聚类的数量,该如何操作?如果我不指定聚类的数量,算法能否自动聚类这些文档,该如何操作?提前感谢。
回答:
聚类是机器学习中一个非常重要的领域(可以类比于数学中的“积分”或编程中的“排序”),有数百种不同的算法,针对不同的问题设置和需求。有些算法需要指定聚类的数量,有些则不需要。有些可以仅使用成对的相似度进行工作,有些则需要对被聚类的项目进行明确的表示等。
我建议你从两个经典的聚类算法开始:
- http://en.wikipedia.org/wiki/K-means_clustering – 在这里,你需要提前指定聚类的数量(“k”),然而被聚类的对象必须是向量空间中的点(有方法可以将文档聚类问题简化为向量空间问题 – 搜索“术语向量表示”)。由于你在处理余弦相似度,看起来你已经有一个向量空间,所以你可以使用K-means算法。
- http://en.wikipedia.org/wiki/Hierarchical_clustering(特别是“单链接聚合聚类” http://en.wikipedia.org/wiki/Single-linkage_clustering) – 在这里,你只需要成对的相似度:你通过反复找到两个最相似的文档并将它们合并到同一个聚类中,直到达到所需的聚类数量,从而构建一棵树。