Sie werden wahrscheinlich oft enttäuscht sein von der Lösung, die ein bestimmter Durchlauf des "k-Means-Algorithmus" (d. H. Des Lloyd-Algorithmus) bietet. Das liegt daran, dass Lloyds Algorithmus oft in schlechten lokalen Minima stecken bleibt.
Glücklicherweise ist Lloyd's nur eine Möglichkeit, k-means zu lösen. Und es gibt einen Ansatz, der fast immer bessere lokale Minima findet.
Der Trick besteht darin, die Clusterzuweisungen der Datenpunkte einzeln zu aktualisieren. Sie können dies effizient durchführen, indem Sie die Anzahl der jedem Mittelwert zugewiesenen Punkte n
beibehalten. Damit können Sie neu berechnen, die Cluster m
bedeuten nach dem Punkt zu entfernen x
wie folgt:
m_new = (n * m - x)/(n - 1)
Und fügen x
mittlere m
Cluster mit:
m_new = (n * m + x)/(n + 1)
Natürlich, weil es nicht sein kann, vektorisiert, ist es ein bisschen schmerzhaft, in MATLAB zu laufen, aber nicht so schlecht in anderen Sprachen.
Wenn Sie wirklich daran interessiert sind, die bestmöglichen lokalen Minima zu erhalten, und es Ihnen nichts ausmacht, ein exemplarbasiertes Clustering zu verwenden, sollten Sie sich affinity propagation ansehen. MATLAB-Implementierungen sind unter Frey lab affinity propagation page verfügbar.
Ich denke, Sie haben Recht. Um eine bessere Konvergenz zu erreichen, änderte ich stattdessen meinen Algorithmus, um mehrere Versuche mit verschiedenen anfänglichen Massenzentren durchzuführen und dann die beste zu bestimmen, indem ich die Varianz der Cluster vermaß. Niedrige mittlere Varianz in einem Versuch entspricht kompakten Clustern. Wie klingt das? – Theodor
@Theodor: Das ist ein mögliches Kriterium. –