【问题标题】:K-means cluster given a CSV with (tf-idf cosine similarity, doc_id1, doc_id2)?给定具有 (tf-idf cosinesimilarity, doc_id1, doc_id2) 的 CSV 的 K-means 聚类?
【发布时间】:2018-01-25 00:59:06
【问题描述】:

我有一个包含以下数据集的 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 均值聚类的内容,但在实现它方面,我很难理解它。有没有可能有用的图书馆? K-means 是正确的方法吗?

编辑: 我只有这个 CSV,所以即使我希望有基于词频的向量,但我没有。如果考虑到我所拥有的只是相似性,K-means 不起作用,那么还有其他算法可以适合这些数据吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的澄清,但不幸的是我无法获得单词的维度(这是我拥有的唯一信息)。如果是这种情况,我猜 KMeans 不是要走的路吗?如果是这样,是否有更适合数据的聚类算法?
      • 不幸的是,基于成对距离,您将无法运行 K-Means。检查此选项:stackoverflow.com/questions/18909096/…
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-11
        • 2017-10-07
        • 2012-07-02
        • 2019-04-27
        • 2020-09-08
        • 2015-04-11
        • 2011-08-13
        • 2013-08-08
        • 2013-02-14
        相关资源
        最近更新 更多