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

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

接下来,我在tf-idf矩阵上运行了均值,其簇数范围为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]

最佳答案

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

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


这对我有用。

关于python - 如何计算带有kmeans的tfidf矩阵中解释的方差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38728828/

10-12 22:43