我试图对文本数据进行聚类,数据是清晰的,标记化的,等等。 如何在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'
答案 0 :(得分:2)
Kmeans算法需要在某个特征空间而不是相似性矩阵中表示的样本。如果要基于相似度矩阵进行聚类,则应查看不同的算法,例如:
哪种数据适合您的需求取决于数据的属性。每种算法在数据假设方面都不同(例如,聚类中以及聚类之间的点分布)。
您可以找到以下CrossValidation问题:Clustering with a distance matrix。它使用距离矩阵,但您可以从距离矩阵转换为相似度矩阵