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

时间:2016-08-02 19:21:05

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

我处理文本数据时相当新。

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

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

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

我想绘制方差解释v。群集数量图,以便我可以区分肘部位置。

我引用了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 个答案:

答案 0 :(得分:2)

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

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

这对我有用。