【问题标题】:How do I figure out the variance explained in tfidf matrix with kmeans?如何用 kmeans 计算 tfidf 矩阵中解释的方差?
【发布时间】: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]

【问题讨论】:

    标签: python scikit-learn k-means tf-idf


    【解决方案1】:

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

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

    这对我有用。

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2015-03-31
      • 2019-05-05
      • 2019-02-15
      • 2021-11-28
      相关资源
      最近更新 更多