2016-08-02 25 views
1

Ich bin ziemlich neu mit der Arbeit mit Textdaten.Wie finde ich die Varianz in Tfidf Matrix mit Kmeans erklärt?

Ich habe einen Datenrahmen von etwa 300.000 eindeutigen Produktnamen und ich versuche, k zu verwenden, um ähnliche Namen zusammen zu clustern. Ich benutzte sklearns tfidfvectorizer, um die Namen zu vektorisieren und in eine tf-idf-Matrix umzuwandeln.

Weiter lief ich k bedeutet auf der TF-IDF-Matrix mit der Anzahl der Cluster Bereich von 5 bis 10.

Ich bin auf auf Fehler stecken, wenn die Varianz zu berechnen versucht erklärt D_kValueError: setting an array element with a sequence.

Ich möchte um die Varianz erklärten v. Anzahl der Cluster-Plot, so dass ich unterscheiden kann, wo der Ellenbogen ist.

Ich Referenzierung 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] 

Antwort

2

Sie konvertieren sollten Ihre tfidf_matrix (die spärlich ist) in eine richtige Anordnung.

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

Das funktionierte für mich.