2017-01-09 3 views
4

Sagen wir, ich bin der Prüfung auf 10 Cluster auf, mit scipy ich den ‚Knick‘ Handlung in der Regel wie folgt generieren:Sklearn KMeans Äquivalent Ellenbogen Methode

from scipy import cluster 
cluster_array = [cluster.vq.kmeans(my_matrix, i) for i in range(1,10)] 

pyplot.plot([var for (cent,var) in cluster_array]) 
pyplot.show() 

Ich habe seit wurde motiviert sklearn für Clustering zu verwenden Ich bin mir jedoch nicht sicher, wie ich das Array erstellen soll, das zum Zeichnen benötigt wird, wie im Fall scipy. Meine beste Vermutung war:

from sklearn.cluster import KMeans 

km = [KMeans(n_clusters=i) for i range(1,10)] 
cluster_array = [km[i].fit(my_matrix)] 

Das leider in einem ungültigen Befehl Fehler. Was ist der beste Weg, um darüber zu gehen?

Danke

Antwort

5

Sie im Code einige Syntaxprobleme hatte. Sie sollten nun behoben sein:

Ks = range(1, 10) 
km = [KMeans(n_clusters=i) for i in Ks] 
score = [km[i].fit(my_matrix).score(my_matrix) for i in range(len(km))] 

Die fit Methode gibt nur ein self Objekt. In dieser Zeile im ursprünglichen Code

cluster_array = [km[i].fit(my_matrix)] 

die cluster_array mit dem gleichen Inhalt wie km enden würde.

Sie können die Methode score verwenden, um eine Schätzung zu erhalten, wie gut das Clustering passt. Um den Score für jeden Cluster anzuzeigen, führen Sie einfach plot(Ks, score) aus.

+0

Formating, 'score = [KMeans (i) .fit (my_matrix) .score (my_matrix) für i in Ks]' –

5

können Sie das Trägheitsattribut der Klasse Kmeans verwenden.

X Unter der Annahme Dataset:

from sklearn.cluster import KMeans 
from matplotlib import pyplot as plt 

X = # <your_data> 
distorsions = [] 
for k in range(2, 20): 
    kmeans = KMeans(n_clusters=k) 
    kmeans.fit(X) 
    distorsions.append(kmeans.inertia_) 

fig = plt.figure(figsize=(15, 5)) 
plt.plot(range(2, 20), distorsions) 
plt.grid(True) 
plt.title('Elbow curve')