给定 CSV 的 K-means 聚类具有(tf-idf 余弦相似性,doc_id1,doc_id2)?

K-means cluster given a CSV with (tf-idf cosine similarity, doc_id1, doc_id2)?

我有一个包含以下数据集的 CSV:

similarity  | doc_id1   | doc_id2
1           |    34     |     0
1           |    29     |     6
0.997801748 |    22     |    10
0.966014701 |    35     |    16
0.964811948 |    14     |    13

其中 "similarity" 指的是来自 tf-idf 余弦相似度计算的值,doc_ids 指的是文档。所以,相似度越接近1,说明两篇文档越相似。

我想根据这些信息对文档进行聚类,但我不太确定该怎么做。我已经阅读了很多关于球形 K 均值聚类的文章,但就实现它而言,我很难全神贯注。有没有可能有用的图书馆? K-means 是正确的方法吗?

编辑: 这个 CSV 是我所有的,所以即使我希望我有基于词频的向量,但我没有。如果 K-means 无法工作,因为我只有相似之处,是否有其他算法适合此数据?

是的,如果您正在使用 python,您应该检查 scikit-learn 包,特别是 sklearn.cluster.KMeans 函数:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

我认为你的问题是你有距离,但 K-Means 使用距质心的欧几里得距离。这意味着,您将需要每个文档的向量,在您的情况下是相当长的向量。您应该对所有单词使用一个维度,而不是计算相似度,并且每个文档中该单词的分数将成为它们的坐标。使用这些向量,您可以使用 Sam B.

建议的 sklearn.cluster.KMeans

K-means 不能使用距离矩阵。它不使用成对距离,而是仅使用点到中心的距离,并且每次迭代都会移动,因此无法预先计算。

你可以试试而是层次聚类。您也可以尝试 DBSCAN、OPTICS 等,但这些可能不会在文本集合上产生好的结果(好吧,好像 k-means 或分层也不会很好地工作)