如何解决相似矩阵聚类
我试图对文本数据进行聚类,数据是清晰的,标记化的,等等。 如何在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。它使用距离矩阵,但您可以从距离矩阵转换为相似度矩阵
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。