如何用 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 矩阵中解释的方差?的主要内容,如果未能解决你的问题,请参考以下文章