【问题标题】:Similarity matrix clustering相似矩阵聚类
【发布时间】:2023-03-12 07:01:01
【问题描述】:

我尝试对文本数据进行聚类,数据清晰、标记化等。 如何在 Kmeans 或其他聚类模型中输入相似度矩阵?

from gensim import corpora
from gensim import models
from gensim.models import Word2Vec, WordEmbeddingSimilarityIndex
from gensim.similarities import SoftCosineSimilarity, SparseTermSimilarityMatrix
documents = list(data['clear_response'])
texts = [[text for text in doc.split()] for doc in documents]
dictionary = corpora.Dictionary(texts)
bow_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in texts]

tfidf = TfidfModel(dictionary=dictionary)
similarity_index = WordEmbeddingSimilarityIndex(w2v_model.wv)
similarity_matrix = SparseTermSimilarityMatrix(similarity_index, dictionary, tfidf, nonzero_limit=100)
docsim_index = SoftCosineSimilarity(bow_corpus, similarity_matrix, num_best=30)

model_sim = KMeans(n_clusters=10, init='k-means++').fit_predict(similarity_matrix)
clusters_sim = model.sim.labels_.tolist()
clusters_sim

TypeError: float() argument must be a string or a number, not 'SparseTermSimilarityMatrix'

【问题讨论】:

    标签: python cluster-analysis data-analysis


    【解决方案1】:

    Kmeans 算法需要在某个特征空间而不是相似度矩阵中表示的样本。如果您想基于相似度矩阵进行聚类,您应该查看不同的算法,例如:

    • MDS(多维缩放),它将根据相似度矩阵将您的点嵌入到某些特征空间中。
    • 基于相似矩阵进行聚类的聚类算法,例如 Neighbor-Joining 或 UPGMA。
    • 使用相似度矩阵定义连通分量的聚类算法,例如谱聚类。

    哪种方式适合您的需求取决于您的数据属性。每种算法对数据的假设不同(例如点在集群中和集群之间的分布)。

    您可以找到以下交叉验证问题:Clustering with a distance matrix。它使用距离矩阵,但您可以从距离矩阵转换为相似矩阵

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2012-04-22
      • 2017-07-27
      • 2018-04-10
      • 2018-04-29
      • 1970-01-01
      • 2016-10-01
      • 2015-10-17
      • 1970-01-01
      相关资源
      最近更新 更多