2017-05-04 5 views
0

Ich versuche die Anzahl der K in Kmeans mit Elbow und BIC Methoden zu schätzen. X ist multidimensionales Array von Datenpunkten (100000 Datenpunkte X 100 Funktionen)
Hier ist der Code, den ich verwende Ellenbogen:Metriken zur Schätzung K in Kmeans

Ks = [40,50,60,70,80,90,100,110,120] 
ds = [] 
for K in Ks: 
    cls = MiniBatchKMeans(K, batch_size =1000, random_state = 101) 
    for i in xrange(0, len(X), 1000): 
     chunk = newvec[i:i + 1000] 
     cls.partial_fit(chunk) 
    ds.append(cls.inertia_) 
plt.plot(Ks, ds) 
plt.xlabel('Value of K') 
plt.ylabel('Distortion') 
plt.show() 

der Code, den ich für BIC verwenden wird von hier by Prabhath Nanisetty

kommenden

hier sind Plots ich erhalte jede dieser Methoden verwenden: Elbow method BIC method

Was ist der richtige K-Wert? Sind das die richtigen Metriken, die basierend auf diesen Ergebnissen für mein Dataset verwendet werden? Danke dir.

Antwort

1

Ich denke, Ihr Datensatz hat viel zu viele Dimensionen und Risiken leiden unter the curse of dimensionality.

Aber um Ihre Frage zu beantworten, zumindest von der Ellenbogen-Methode, scheint es, als ob K = 90 mit der Ellbogen-Methode geht. Um die BIC-Methode zu verwenden, betrachten Sie den höchsten Wert (gemäß dieser bestimmten Implementierung; einige Implementierungen kehren die Zeichen um). Dies macht es ein wenig mehrdeutig, aber scheint, dass nach K = 60 alle von ihnen fast gleich gut funktionieren.

Sie können auch einen Blick auf this article on the same topic werfen. Es führt eine andere Methode ein, um K, die Gap-Methode, zu schätzen. Ich würde sagen, dass eine weitere Metrik ausgeführt werden muss, um die Verbindungen zu trennen und dann das beste K auszuwählen, das von 2 oder mehr der 3 Messwerte zurückgegeben wurde.