Ich habe versucht, die verschiedenen k-means Clustering-Algorithmen zu verstehen, die hauptsächlich im stats
Paket der R
Sprache implementiert sind .
Ich verstehe den Lloyd's-Algorithmus und den MacQueen-Online-Algorithmus. Ich verstehe sie wie folgt:
Lloyd's Algorithmus:
Zunächst werden 'k'-Zufallsbeobachtungen ausgewählt, die als Schwerpunkte der' k'-Cluster dienen. Dann treten die folgenden Schritte in der Iteration auf, bis die Zentroide konvergieren.
- Der euklidische Abstand zwischen jeder Beobachtung und den ausgewählten Schwerpunkten wird berechnet.
- Die Beobachtungen, die den einzelnen Zentroiden am nächsten sind, sind in "k" -Eimern markiert.
- Der Mittelwert aller Beobachtungen in jedem Eimer dient als neue Schwerpunkte.
- Die neuen Zentroide ersetzen die alten Zentroide und die Iteration geht zurück zu Schritt 1, wenn die alten und neuen Zentroide nicht konvergiert haben.
Die Bedingungen für die Konvergenz sind folgende: Die alten und die neuen Zentroide sind genau identisch, der Unterschied zwischen den Zentroiden ist gering (in der Größenordnung von 10 ^ -3) oder die maximale Anzahl von Iterationen (10 oder 100) wird erreicht.
MacQueens Algorithmus:
Dies ist eine Online-Version, bei der die ersten 'k'-Instanzen als Schwerpunkte ausgewählt werden.
Dann wird jede Instanz in Buckets platziert, je nachdem, welcher Schwerpunkt dieser Instanz am nächsten liegt. Der jeweilige Schwerpunkt wird neu berechnet.
Wiederholen Sie diesen Schritt, bis jede Instanz in den entsprechenden Bucket gestellt wird.
Dieser Algorithmus hat nur eine Iteration und die Schleife wird für 'x'-Instanzen fortgesetzt
Hartigan-Wong-Algorithmus:
- Ordnen Sie alle Punkte / Instanzen zufälligen Buckets zu und berechnen Sie den jeweiligen Schwerpunkt.
- Suchen Sie ausgehend von der ersten Instanz den nächsten Schwerpunkt und bewerten Sie diesen Eimer. Wenn sich der Bucket geändert hat, berechnen Sie die neuen Schwerpunkte neu, dh den Schwerpunkt des neu zugewiesenen Buckets und den Schwerpunkt der alten Bucket-Zuordnung, da dies zwei Schwerpunkte sind, die von der Änderung betroffen sind
- Durchlaufen Sie alle Punkte und erhalten Sie neue Schwerpunkte.
- Führen Sie eine zweite Iteration der Punkte 2 und 3 durch, die eine Art Bereinigungsvorgang ausführt und Streupunkte neu zuordnet, um die Eimer zu korrigieren.
Dieser Algorithmus führt also zwei Iterationen durch, bevor wir das Konvergenzergebnis sehen.
Ich bin mir nicht sicher, ob das, was ich in Punkt 4 des Hartigan-Wong-Algorithmus denke, die richtige Methode des Algorithmus ist. Meine Frage ist, ob die folgende Methode für Hartigan-Wong die richtige Methode ist, um k-means zu implementieren. Gibt es nur zwei Iterationen für diese Methode? Wenn nicht, wie ist die Bedingung für die Konvergenz (wann zu stoppen)?
Eine andere mögliche Erklärung für die Implementierung, die ich verstehe, ist.
- Ordnen Sie alle Punkte / Instanzen zufälligen Buckets zu und berechnen Sie den jeweiligen Schwerpunkt.
- Suchen Sie ausgehend von der ersten Instanz den nächsten Schwerpunkt und weisen Sie diesen Bucket zu. Wenn sich der Bucket geändert hat, berechnen Sie die neuen Schwerpunkte neu, dh den Schwerpunkt des neu zugewiesenen Buckets und den Schwerpunkt der alten Bucket-Zuordnung, da dies zwei Schwerpunkte sind, die von der Änderung betroffen sind.
- Sobald sich der Bucket für einen beliebigen Punkt geändert hat, kehren Sie zur ersten Instanz zurück und wiederholen Sie die Schritte erneut.
- Die Iteration endet, wenn alle Instanzen iteriert sind und keiner der Punkte den Bucket ändert.
Auf diese Weise gibt es viele Iterationen, die jedes Mal, wenn eine Instanz Buckets ändert, am Anfang des Datasets beginnen.
Alle Erklärungen wären hilfreich und lassen Sie mich bitte wissen, wenn mein Verständnis für eine dieser Methoden falsch ist.
quelle
Antworten:
Der HW-Algorithmus aus dem Artikel von 1979 verwendet als Eingabe anfängliche Cluster. Die Autoren schlagen jedoch in ihrem letzten Abschnitt eine Methode vor, um sie zu erhalten. Sie schreiben, dass garantiert ist, dass kein Cluster nach der anfänglichen Zuweisung in der Unterroutine leer ist . Es geht wie folgt:
Der Hauptalgorithmus wird in einem Artikel mit dem Titel Hartigans K-Mittel gegen Lloyds K-Mittel beschrieben. Ist es Zeit für eine Änderung? von N. Slonim, E. Aharoni, K. Crammer, veröffentlicht 2013 von AJCAI . Beachten Sie, dass diese Version einfach eine zufällige Anfangspartition verwendet. Es geht wie folgt.
Ich denke, die Antworten auf alle Ihre Fragen sind im obigen Algorithmus enthalten ... Ich muss jedoch noch sicherstellen, dass diese Implementierung des Algorithmus Standard ist . Insbesondere wenn es sich um die in R implementierte handelt. Kommentare / Änderungen sind willkommen.
quelle