如何用 kmeans 计算 tfidf 矩阵中解释的方差?

Posted

技术标签:

【中文标题】如何用 kmeans 计算 tfidf 矩阵中解释的方差?【英文标题】:How do I figure out the variance explained in tfidf matrix with kmeans? 【发布时间】:2016-12-08 07:17:11 【问题描述】:

我对处理文本数据还很陌生。

我有一个包含大约 300,000 个唯一产品名称的数据框,我正在尝试使用 k 方法将相似的名称聚集在一起。我使用 sklearn 的 tfidfvectorizer 对名称进行矢量化并转换为 tf-idf 矩阵。

接下来我在 tf-idf 矩阵上运行 k 均值,簇数从 5 到 10 不等。

我在尝试计算为 D_k ValueError: setting an array element with a sequence. 解释的方差时遇到了错误

我想绘制解释的方差与聚类数的关系图,以便区分肘部的位置。

我引用的是https://datascience.stackexchange.com/questions/6508/k-means-incoherent-behaviour-choosing-k-with-elbow-method-bic-variance-explain

from sklearn.feature_extraction.text import TfidfVectorizer
#define vectorizer parameters

tfidf_vectorizer = TfidfVectorizer(use_idf=True,
                                   stop_words = 'english',
                                   ngram_range=(2,4))

%time tfidf_matrix = tfidf_vectorizer.fit_transform(unique_names)

# clustering with kmeans
from sklearn.cluster import KMeans

num_clusters = range(5,10)

%time KM = [KMeans(n_clusters=k).fit(tfidf_matrix) for k in num_clusters]


from scipy.spatial.distance import cdist, pdist

centroids = [k.cluster_centers_ for k in KM]
D_k = [cdist(tfidf_matrix, cent) for cent in centroids]

【问题讨论】:

【参考方案1】:

您应该将您的 tfidf_matrix(稀疏)转换为适当的数组。

D_k = [cdist(tfidf_matrix.toarray(), cent) for cent in centroids]

这对我有用。

【讨论】:

以上是关于如何用 kmeans 计算 tfidf 矩阵中解释的方差?的主要内容,如果未能解决你的问题,请参考以下文章

如何分析sklearn中tfidf矩阵的值?

矩阵 TFIDF 的降维

如何用mapreduce分布式实现kmeans算法

当我们只向它提供单个单词的 tfidf 向量时,kmeans 是如何知道如何对文档进行聚类的?

如何用 sklearn 计算词-词共现矩阵?

如何用MATLAB计算矩阵的行列式