相似矩阵聚类

问题描述

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

解决方法

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

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...