2016-08-02 83 views
1

我對處理文本數據相當陌生。如何計算kmeans在tfidf矩陣中解釋的方差?

我有一個約300,000個獨特產品名稱的數據框,我試圖用k方法將相似的名稱聚類在一起。我使用sklearn的tfidfvectorizer矢量化名稱並將其轉換爲tf-idf矩陣。

接着我跑與羣集嘗試計算方差時爲5至10。

我在卡在錯誤的數目的TF-IDF矩陣K用於D_kValueError: 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] 

回答

2

應該轉換tfidf_matrix(這是稀疏的)到合適的陣列。

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

這對我有效。