相似矩阵聚类

时间:2020-09-01 08:50:15

标签: python cluster-analysis data-analysis

我试图对文本数据进行聚类,数据是清晰的,标记化的,等等。 如何在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'

1 个答案:

答案 0 :(得分:2)

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

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

哪种数据适合您的需求取决于数据的属性。每种算法在数据假设方面都不同(例如,聚类中以及聚类之间的点分布)。

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