K-means聚类给出了一个带有(tf-idf余弦相似度,doc_id1,doc_id2)的CSV?

时间:2017-08-16 18:59:45

标签: python csv cluster-analysis tf-idf cosine-similarity

我有一个包含以下数据集的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在我所拥有的所有内容都是相似的情况下不会起作用,那么还有其他适合这些数据的算法吗?

3 个答案:

答案 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或者层次结构也能很好地工作)