numpy - 如何根据 Gensim TFIDF 值执行 kmean 聚类

标签 numpy k-means gensim tf-idf corpus

我正在使用 Gensim 进行向量空间模型。从 Gensim 创建字典和语料库后,我使用以下行计算了(术语频率*逆文档频率)TFIDF

Term_IDF  = TfidfModel(corpus)
corpus_tfidf = Term_IDF[corpus]

corpus_tfidf 包含具有术语 id 和相应 TFIDF 的列表的列表。然后我使用以下几行将 TFIDF 与 ids 分开:

 for doc in corpus_tfidf:
     for ids,tfidf in doc:    
         IDS.append(ids)
         tfidfmtx.append(tfidf)    
         IDS=[]

现在我想使用 k 均值聚类,所以我想执行 tfidf 矩阵的余弦相似度,问题是 Gensim 不会生成方阵,所以当我运行下面的行时,它会生成错误。我想知道如何从 Gensim 获取方阵来计算向量空间模型中所有文档的相似度。另外,如何将 tfidf 矩阵(在本例中是列表的列表)转换为 2D NumPy 数组。非常感谢任何评论。

dumydist = 1 - cosine_similarity(tfidfmtx)

最佳答案

当您将语料库拟合到 Gensim 词典时,获取词典中的数字或文档和标记:

from gensim.corpora.dictionary import Dictionary
dictionary = Dictionary(corpus_lists)
num_docs = dictionary.num_docs
num_terms = len(dictionary.keys())

变身为弓:

corpus_bow = [dictionary.doc2bow(doc) for doc in corpus_lists]

转换为tf-idf:

from gensim.models.tfidfmodel import TfidfModel
tfidf = TfidfModel(corpus_bow)
corpus_tfidf = tfidf[corpus_bow]

现在您可以转换为稀疏/密集矩阵:

from gensim.matutils import corpus2dense, corpus2csc
corpus_tfidf_dense = corpus2dense(corpus_tfidf, num_terms, num_docs)
corpus_tfidf_sparse = corpus2csc(corpus_tfidf, num_terms, num_docs)

现在使用稀疏/密集矩阵(转置后)拟合您的模型:

model = KMeans(n_clusters=7)
clusters = model.fit_predict(corpus_bow_dense.T)

关于numpy - 如何根据 Gensim TFIDF 值执行 kmean 聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933591/

相关文章:

java - 一组 3D 点的聚类

Python NLP 英式英语 vs 美式英语

python - 如何读取 10 位 Raw 图像?其中包含 RGB-IR 数据

python - 二维数组的 numpy in1d 实现?

python - OpenCV-KMeans2导致许多空集群

pip - Gensim: "C extension not loaded, training will be slow."

python - gensim Word2vec 作为 HTTP 服务的代码 'KeyedVectors' 属性错误

python - Matplotlib 通过颜色图绘制带有颜色的线条

python - 绘图中的彩色 LaTeX 标签

cluster-analysis - 将单词聚类成组