Ein Ansatz, der konsistentere Ergebnisse liefert, ist K-means ++ . Dieser Ansatz erkennt an, dass es wahrscheinlich eine bessere Auswahl an anfänglichen Schwerpunktorten gibt als eine einfache zufällige Zuordnung. Speziell K-means neigen dazu, eine bessere Leistung zu erbringen, wenn Zentroide so ausgesät werden, dass sie im Weltraum nicht zusammenklumpen.
Kurz gesagt ist die Methode wie folgt:
- Wählen Sie einen Ihrer Datenpunkte nach dem Zufallsprinzip als Anfangsschwerpunkt aus.
- Berechnen Sie , den Abstand zwischen Ihrem Anfangsschwerpunkt und allen anderen Datenpunkten, x .D( x )x
- Wählen Sie Ihren nächsten Schwerpunkt aus den verbleibenden Datenpunkten mit einer Wahrscheinlichkeit proportional zu D (x )2
- Wiederholen Sie diesen Vorgang, bis alle Schwerpunkte zugewiesen wurden.
D ( x )
Sie können auch dieses Dokument lesen , das die Methode vorschlägt und deren erwartete Gesamtleistung beschreibt.
Der übliche Ansatz für dieses Problem besteht darin, Ihren K-means-Algorithmus mehrmals mit verschiedenen zufälligen Initialisierungen der Zentroide erneut auszuführen und die beste Lösung beizubehalten. Sie können dies tun, indem Sie die Ergebnisse anhand Ihrer Trainingsdaten auswerten oder eine Kreuzvalidierung durchführen.
Es gibt viele andere Möglichkeiten, die Zentroide zu initialisieren, aber keine von ihnen bietet für jedes einzelne Problem die beste Leistung. Sie können diese Ansätze zusammen mit einer zufälligen Initialisierung für Ihr spezielles Problem bewerten.
quelle
Ich stimme der Handlung von Elbow / Scree zu. Ich fand es intuitiver als einen zufälligen Samen. Hier ist ein Beispielcode, um es zu versuchen.
quelle