Matlab: Kmeans gibt jedes Mal andere Ergebnisse

8

Ich starte kmeans in Matlab auf einer 400x1000 Matrix und aus irgendeinem Grund bekomme ich verschiedene Ergebnisse wenn ich den Algorithmus starte. Unten ist ein Codebeispiel:

%Vor%

Aus irgendeinem Grund bekomme ich jedes Mal, wenn ich diesen Code ausführe, unterschiedliche Ergebnisse? irgendwelche Ideen?

Ich verwende es, um Multikollinearitätsprobleme zu identifizieren.

Danke für die Hilfe!

    
user1129988 27.08.2012, 06:40
quelle

3 Antworten

18

Die k-means-Implementierung in MATLAB hat eine randomisierte Komponente: die Auswahl der Anfangszentren. Dies führt zu unterschiedlichen Ergebnissen. In der Praxis läuft MATLAB jedoch mehrere Male k-means und gibt Ihnen das Clustering mit der geringsten Verzerrung zurück. Wenn Sie jedes Mal sehr unterschiedliche Clusterings sehen, kann dies bedeuten, dass Ihre Daten nicht der Art von Clustern (sphärisch) zugänglich sind, nach denen k-means sucht, und dies ist ein Hinweis darauf, andere Clusteralgorithmen (z. B. spektrale) auszuprobieren.

Sie können ein deterministisches Verhalten erhalten, indem Sie eine erste Menge von Zentren als eines der Funktionsargumente (die ) übergeben start -Parameter ). Dadurch erhalten Sie jedes Mal die gleiche Ausgabeclusterung. Es gibt mehrere Heuristiken, um den ersten Satz von Zentren zu wählen (zB K-means ++ ).

    
Ansari 27.08.2012 06:57
quelle
6

Wie Sie auf dem Wiki lesen können, sind k-Means Algorithmen in der Regel heuristisch und teilweise probabilistisch in Matlab ist keine Ausnahme.

Dies bedeutet, dass es einen bestimmten zufälligen Teil zum Algorithmus gibt (in Matlabs Fall , wiederholt zufällige Startpunkte, um die globale Lösung zu finden). Dies macht kmeans -Ausgabecluster, die im Durchschnitt von guter Qualität sind. Aber: Angesichts der pseudozufälligen Natur des Algorithmus erhalten Sie jedes Mal leicht unterschiedliche Cluster - das ist normales Verhalten.

    
Rody Oldenhuis 27.08.2012 06:47
quelle
2

Dies wird Initialisierungsproblem genannt, da Kmeans mit zufälligen Anfangspunkten beginnt, um Ihre Daten zu gruppieren. Matlab wählt k zufällige Punkte aus und berechnet die Entfernung von Punkten in Ihren Daten zu diesen Orten und findet neue Zentroide, um die Entfernung weiter zu minimieren. Sie erhalten also möglicherweise andere Ergebnisse für Schwerpunktorte, aber die Antwort ist ähnlich.

    
user14372 14.11.2013 21:33
quelle