Wir finden die Cluster-Zentren und weisen k verschiedenen Cluster-Klassen Punkte zu. Dies ist ein sehr bekannter Algorithmus, der fast in jedem maschinellen Lernpaket im Netz zu finden ist. Aber der fehlende und wichtigste Teil meiner Meinung nach ist die Wahl eines korrekten k. Was ist der beste Wert dafür? Und was ist mit am besten gemeint ?
Ich verwende MATLAB für wissenschaftliche Berechnungen, bei denen das Betrachten von Silhouetten-Plots als Entscheidungsgrundlage für das hier diskutierte k dient . Ich würde mich jedoch mehr für Bayes'sche Ansätze interessieren. Anregungen sind willkommen.
clustering
k-means
Petrichor
quelle
quelle
R
über hierAntworten:
Dies wurde einige Male beim Stackoverflow gefragt: hier , hier und hier . Sie können sich ansehen, was die Menge dort über diese Frage (oder eine kleine Variante davon) denkt.
Lassen Sie mich auch meine eigene Antwort auf diese Frage auf stackoverflow.com kopieren:
Leider gibt es keine Möglichkeit, das "richtige" K automatisch zu setzen, und es gibt auch keine Definition dessen, was "richtig" ist. Es gibt keine einfache oder komplexe prinzipielle statistische Methode, die das "richtige K" setzen kann. Es gibt Heuristiken, Faustregeln, die manchmal funktionieren, manchmal nicht.
Die Situation ist allgemeiner, da viele Clustering-Methoden diese Art von Parametern haben, und ich denke, dies ist ein großes offenes Problem in der Clustering- / unbeaufsichtigten Lernforschungsgemeinschaft.
quelle
Erstens eine Einschränkung. Beim Clustering gibt es häufig keine "richtige Antwort" - ein Clustering ist möglicherweise um eine Metrik besser als das andere, und umgekehrt kann es bei Verwendung einer anderen Metrik zutreffen. In einigen Situationen können zwei verschiedene Cluster unter derselben Metrik gleich wahrscheinlich sein.
Dennoch möchten Sie vielleicht einen Blick auf Dirichlet-Prozesse werfen . Siehe auch dieses Tutorial .
Wenn Sie mit einem Gaußschen Mischungsmodell beginnen, haben Sie das gleiche Problem wie bei k-means - Sie müssen die Anzahl der Cluster wählen. Sie können Modellnachweise verwenden, diese sind in diesem Fall jedoch nicht zuverlässig. Der Trick besteht also darin, vor den Mischungskomponenten einen Dirichlet-Prozess zu verwenden, der es Ihnen ermöglicht, eine möglicherweise unendliche Anzahl von Mischungskomponenten zu haben. Das Modell findet jedoch (normalerweise) automatisch die "richtige" Anzahl von Komponenten (unter den Voraussetzungen von) das Model).
quelle
Ich benutze die Elbow-Methode :
Das Grundprinzip ist, dass Sie danach die Anzahl der Cluster erhöhen, aber der neue Cluster ist sehr nahe an einigen der vorhandenen.
quelle
Die Clustergröße hängt stark von Ihren Daten ab und davon, wofür Sie die Ergebnisse verwenden. Wenn Sie Ihre Daten zum Aufteilen von Dingen in Kategorien verwenden, versuchen Sie sich vorzustellen, wie viele Kategorien Sie zuerst möchten. Wenn es sich um eine Datenvisualisierung handelt, konfigurieren Sie sie so, dass die Benutzer sowohl die großen als auch die kleineren Cluster sehen können.
Wenn Sie es automatisieren müssen, möchten Sie möglicherweise eine Strafe für die Erhöhung von k hinzufügen und auf diese Weise den optimalen Cluster berechnen. Und dann wiegen Sie nur k, je nachdem, ob Sie eine Tonne Cluster oder nur sehr wenige möchten.
quelle
Sie können auch Unsupervised Optimal Fuzzy Clustering (Nicht überwachtes optimales Fuzzy-Clustering) überprüfen , um das von Ihnen erwähnte Problem (Ermittlung der Anzahl der Cluster) zu lösen, für das hier eine geänderte Version implementiert ist
quelle
Ich habe es geschafft, die "L-Methode" zu verwenden, um die Anzahl von Clustern in einer geografischen Anwendung zu bestimmen (dh im Wesentlichen ein 2d-Problem, obwohl technisch nicht euklidisch).
Die L-Methode wird hier beschrieben: Bestimmen der Anzahl der Cluster / Segmente in hierarchischen Cluster- / Segmentierungsalgorithmen Stan Salvador und Philip Chan
Im Wesentlichen bewertet dies die Anpassung für verschiedene Werte von k. Ein "L" -förmiges Diagramm wird mit dem optimalen k-Wert angezeigt, der durch das Knie im Diagramm dargestellt wird. Eine einfache Berechnung der kleinsten Quadrate mit zwei Linien wird verwendet, um den Kniepunkt zu finden.
Ich fand die Methode sehr langsam, da das iterative k-Mittel für jeden Wert von k berechnet werden muss. Außerdem fand ich, dass k-means am besten mit mehreren Läufen funktioniert und am Ende das Beste auswählt. Obwohl jeder Datenpunkt nur zwei Dimensionen aufwies, konnte kein einfacher pythagoreischer Abstand verwendet werden. Das ist also eine Menge Rechenaufwand.
Ein Gedanke ist, jeden anderen Wert von k (sagen wir) zur Hälfte der Berechnungen zu überspringen und / oder die Anzahl der Iterationen der k-Mittelwerte zu verringern und dann die resultierende Kurve leicht zu glätten, um eine genauere Anpassung zu erzielen. Ich habe diesbezüglich bei StackOverflow - IMHO nachgefragt , die Glättungsfrage bleibt eine offene Forschungsfrage.
quelle
Aber was ist, wenn Ihr Datensatz nicht in das Voronoi-Schema passt?
quelle
Insgesamt können Sie die Anzahl der Cluster in zwei verschiedenen Pfaden auswählen.
Wissensgetrieben: Sie sollten einige Ideen haben, wie viele Cluster Sie aus geschäftlicher Sicht benötigen. Wenn Sie beispielsweise Kunden gruppieren, sollten Sie sich fragen, was ich als Nächstes tun soll, nachdem Sie diese Kunden erhalten haben? Vielleicht werden Sie für verschiedene Cluster unterschiedlich behandelt? (zB Werbung per E-Mail oder Telefon). Wie viele mögliche Behandlungen planen Sie dann? In diesem Beispiel wählen Sie aus, dass 100 Cluster nicht sehr sinnvoll sind.
Datengesteuert: Mehr Cluster sind überpasst und weniger Cluster sind unterpasst. Sie können Daten jederzeit in zwei Hälften teilen und eine Kreuzvalidierung durchführen, um festzustellen, wie viele Cluster gut sind. Beachten Sie, dass Sie beim Clustering immer noch die Verlustfunktion haben, ähnlich wie bei der überwachten Einstellung.
Schließlich sollten Sie in der realen Welt immer wissensbasiert und datenbasiert miteinander kombinieren.
quelle
Da noch niemand darauf hingewiesen hat, dachte ich, ich würde dies teilen. Es gibt eine Methode namens X-means ( siehe diesen Link ), die die richtige Anzahl von Clustern unter Verwendung des Bayesian Information Criterion (BIC) schätzt. Dies wäre im Wesentlichen so, als würde man versuchen, K mit unterschiedlichen Ks zu versuchen, den BIC für jedes K zu berechnen und das beste K auszuwählen. Dieser Algorithmus erledigt dies effizient.
Es gibt auch eine weka- Implementierung, deren Details hier zu finden sind .
quelle
Ein anderer Ansatz ist die Verwendung eines Evolutionsalgorithmus, dessen Individuen Chromosomen unterschiedlicher Länge aufweisen. Jedes Individuum ist eine Kandidatenlösung: Jedes Individuum trägt die Schwerpunktkoordinaten. Die Anzahl der Zentroide und ihre Koordinaten werden entwickelt, um eine Lösung zu erhalten, die die beste Punktzahl für die Clusterbewertung ergibt.
In diesem Artikel wird der Algorithmus erläutert.
quelle