Soweit ich weiß, wählt k-means die Anfangszentren zufällig aus. Da sie auf purem Glück basieren, können sie wirklich schlecht ausgewählt werden. Der K-means ++ Algorithmus versucht, dieses Problem zu lösen, indem er die Anfangszentren gleichmäßig verteilt.
Garantieren die beiden Algorithmen die gleichen Ergebnisse? Oder es ist möglich, dass die schlecht ausgewählten Anfangsschwerpunkte zu einem schlechten Ergebnis führen, egal wie viele Iterationen.
Nehmen wir an, es gibt einen bestimmten Datensatz und eine bestimmte Anzahl gewünschter Cluster. Wir führen einen k-means-Algorithmus aus, solange er konvergiert (keine Mittenbewegung mehr). Gibt es eine genaue Lösung für dieses Clusterproblem (bei gegebener SSE), oder führt k-means bei erneuter Ausführung zu manchmal unterschiedlichen Ergebnissen?
Wenn es mehr als eine Lösung für ein Clustering-Problem gibt (gegebener Datensatz, gegebene Anzahl von Clustern), garantiert K-means ++ ein besseres Ergebnis oder nur ein schnelleres? Mit besser meine ich niedrigere SSE.
Der Grund, warum ich diese Fragen stelle, ist, dass ich auf der Suche nach einem k-means-Algorithmus zum Clustering eines riesigen Datensatzes bin. Ich habe einige k-means ++ gefunden, aber es gibt auch einige CUDA-Implementierungen. Wie Sie bereits wissen, verwendet CUDA die GPU und kann mehr als Hunderte von Threads parallel ausführen. (So kann es den gesamten Prozess wirklich beschleunigen). Aber keine der CUDA-Implementierungen - die ich bisher gefunden habe - hat eine k-means ++ - Initialisierung.
k-means picks the initial centers randomly
. Das Auswählen von Anfangszentren ist nicht Teil des k-means-Algorithmus selbst. Die Zentren können beliebig gewählt werden. Eine gute Implementierung von k-means bietet verschiedene Optionen zum Definieren von Anfangszentren (zufällige, benutzerdefinierte, k-äußerste Punkte usw.)