我有一个包含以下数据集的CSV:
similarity | doc_id1 | doc_id2
1 | 34 | 0
1 | 29 | 6
0.997801748 | 22 | 10
0.966014701 | 35 | 16
0.964811948 | 14 | 13
其中"相似性"指的是来自tf-idf余弦相似度计算的值,doc_ids指的是文档。因此,相似性越接近1,两个文档越相似。
我想根据这些信息对文档进行聚类,但我不完全确定如何这样做。我已经阅读了很多关于球形K-means聚类的内容,但就实现它而言,我很难绕过它。是否有可能有用的库? K-means是正确的方式吗?
修改 这个CSV就是我所拥有的,所以即使我希望我有基于单词频率的矢量,我也不会这样做。如果K-means在我所拥有的所有内容都是相似的情况下不会起作用,那么还有其他适合这些数据的算法吗?
答案 0 :(得分:1)
我相信你的问题是你有距离,但K-Means使用距离质心的欧几里德距离。这意味着,您需要为每个文档添加一个向量,在您的情况下需要很长的向量。您应该对所有单词使用一个维度,而不是计算相似度,并且每个文档中该单词的分数将使其成为坐标。使用这些向量,您可以使用Sam B建议的sklearn.cluster.KMeans。
答案 1 :(得分:0)
是的,如果你使用python,你应该检查scikit-learn
包,特别是sklearn.cluster.KMeans
函数:
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
答案 2 :(得分:0)
K-means 不能使用距离矩阵。它不使用成对距离,而是仅使用点到中心距离,并且平均值将移动每次迭代,因此无法预先计算。
你可以尝试例如而是分层聚类。你也可以尝试DBSCAN,OPTICS,......但是这些可能不会给文本集合带来好的结果(好吧,它不像k-means或者层次结构也能很好地工作)