Effiziente K-Means-Bewertung mit Silhouette-Score in Sklearn

8

Ich betreibe k-means-Clustering für ~ 1 Million Elemente (die jeweils als ~ 100-Feature-Vektor dargestellt werden). Ich habe das Clustering für verschiedene k durchgeführt und möchte nun die verschiedenen Ergebnisse mit dem in sklearn implementierten Silhouetten-Score bewerten. Der Versuch, es ohne Sampling auszuführen, scheint undurchführbar und dauert viel zu lange, daher nehme ich an, dass ich Sampling verwenden muss, d. H .:

%Vor%

Ich habe jedoch kein gutes Gespür dafür, was ein angemessener Stichprobenansatz ist. Gibt es eine Faustregel für die Größe der zu verwendenden Probe in Anbetracht der Größe meiner Matrix? Ist es besser, die größte Probe zu nehmen, die mein Analysegerät verarbeiten kann, oder den Durchschnitt von kleineren Proben zu nehmen?

Ich frage zu einem großen Teil, weil mein vorläufiger Test (mit sample_size = 10000) einige wirklich wirklich nicht intuitive Ergebnisse hervorgebracht hat.

Ich bin auch offen für alternative, besser skalierbare Evaluierungsmetriken.

Bearbeiten, um das Problem zu visualisieren: Die Grafik zeigt für unterschiedliche Stichprobengrößen den Silhouettenwert als Funktion der Anzahl der Cluster

Es ist nicht seltsam, dass die zunehmende Stichprobengröße das Rauschen zu reduzieren scheint. Was ist seltsam, da ich 1 Million sehr heterogene Vektoren habe, dass 2 oder 3 die "beste" Anzahl von Clustern ist. Mit anderen Worten, was unintuitiv ist, ist, dass ich eine mehr oder weniger monoton abnehmende Silhouette-Punktzahl finden würde, wenn ich die Anzahl der Cluster vergrößere.

    
moustachio 15.05.2014, 19:41
quelle

2 Antworten

1
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123scikitlearn ___ scikit-learn ist eine Machine-Learning-Bibliothek für Python, die einfache und effiziente Werkzeuge für die Datenanalyse und das Data Mining bietet, mit Schwerpunkt auf maschinellem Lernen. Es ist für jeden zugänglich und in verschiedenen Kontexten wiederverwendbar. Es basiert auf NumPy und SciPy. Das Projekt ist Open Source und kommerziell nutzbar (BSD-Lizenz). ___ qstntxt ___

Ich betreibe k-means-Clustering für ~ 1 Million Elemente (die jeweils als ~ 100-Feature-Vektor dargestellt werden). Ich habe das Clustering für verschiedene k durchgeführt und möchte nun die verschiedenen Ergebnisse mit dem in sklearn implementierten Silhouetten-Score bewerten. Der Versuch, es ohne Sampling auszuführen, scheint undurchführbar und dauert viel zu lange, daher nehme ich an, dass ich Sampling verwenden muss, d. H .:

%Vor%

Ich habe jedoch kein gutes Gespür dafür, was ein angemessener Stichprobenansatz ist. Gibt es eine Faustregel für die Größe der zu verwendenden Probe in Anbetracht der Größe meiner Matrix? Ist es besser, die größte Probe zu nehmen, die mein Analysegerät verarbeiten kann, oder den Durchschnitt von kleineren Proben zu nehmen?

Ich frage zu einem großen Teil, weil mein vorläufiger Test (mit sample_size = 10000) einige wirklich wirklich nicht intuitive Ergebnisse hervorgebracht hat.

Ich bin auch offen für alternative, besser skalierbare Evaluierungsmetriken.

Bearbeiten, um das Problem zu visualisieren: Die Grafik zeigt für unterschiedliche Stichprobengrößen den Silhouettenwert als Funktion der Anzahl der Cluster

Es ist nicht seltsam, dass die zunehmende Stichprobengröße das Rauschen zu reduzieren scheint. Was ist seltsam, da ich 1 Million sehr heterogene Vektoren habe, dass 2 oder 3 die "beste" Anzahl von Clustern ist. Mit anderen Worten, was unintuitiv ist, ist, dass ich eine mehr oder weniger monoton abnehmende Silhouette-Punktzahl finden würde, wenn ich die Anzahl der Cluster vergrößere.

    
___ tag123clusteranalyse ___ Clusteranalyse ist der Prozess der Gruppierung "ähnlicher" Objekte in Gruppen, die als "Cluster" bekannt sind, zusammen mit der Analyse dieser Ergebnisse. ___ antwort43729263 ___

Andere Messwerte

  1. Ellbogenmethode: Berechne die% Varianz, die für jedes K erklärt wurde, und wähle das K, bei dem der Plot sich zu nivellieren beginnt. (Eine gute Beschreibung ist hier Ссылка ). Offensichtlich, wenn Sie k == Anzahl der Datenpunkte haben, können Sie 100% der Varianz erklären. Die Frage ist, wo sich die erklärten Verbesserungen der Varianz abschwächen.

  2. Informationstheorie: Wenn Sie eine Wahrscheinlichkeit für ein gegebenes K berechnen können, können Sie die AIC, AICc oder BIC (oder einen anderen informationstheoretischen Ansatz) verwenden. Z.B. Für die AICc gleicht sie nur die Zunahme der Wahrscheinlichkeit aus, wenn Sie K mit der Zunahme der Anzahl der Parameter erhöhen, die Sie benötigen. In der Praxis wählen Sie nur das K, das die AICc minimiert.

  3. Sie können ein Gefühl für ein ungefähr angemessenes K erhalten, wenn Sie alternative Methoden ausführen, die Ihnen eine Schätzung der Anzahl von Clustern wie DBSCAN geben. Obwohl ich diesen Ansatz nicht gesehen habe, wurde K geschätzt, und es ist wahrscheinlich nicht ratsam, sich darauf zu verlassen. Wenn DBSCAN Ihnen jedoch auch hier eine kleine Anzahl von Clustern zur Verfügung gestellt hat, gibt es wahrscheinlich etwas an Ihren Daten, das Sie möglicherweise nicht schätzen (d. H. Nicht so viele Cluster erwarten Sie).

Wie viel probiert man

?

Es sieht so aus, als hättest du das aus deinem Plot geantwortet: Egal was du machst, du bekommst das gleiche Muster im Silhouetten-Score. Diese Muster scheinen also sehr robust gegenüber Stichprobenannahmen zu sein.

    
___ qstnhdr ___ Effiziente K-Means-Bewertung mit Silhouette-Score in Sklearn ___ answer44265183 ___

kmeans konvergieren zu lokalen Minima. Startpositionen spielen eine entscheidende Rolle für die optimale Anzahl von Clustern. Es wäre eine gute Idee, das Rauschen und die Abmessungen mit PCA oder anderen Techniken zur Dimensionsreduzierung zu reduzieren, um mit K-Methoden fortzufahren.

Nur um der Vollständigkeit halber hinzuzufügen. Es könnte eine gute Idee sein, eine optimale Anzahl von Clustern durch "Partitionierung um Medoide" zu erhalten. Dies entspricht der Silhouette-Methode.

Grund für die seltsamen Beobachtungen könnten unterschiedliche Startpunkte für unterschiedlich große Samples sein.

Nachdem alle oben genannten Punkte gesagt wurden, ist es wichtig, die Clusterfähigkeit des vorliegenden Datensatzes zu bewerten. Tractable Mittel ist durch Worst Pair-Verhältnis wie hier diskutiert Clustability .

    
___
roblanf 02.05.2017 02:46
quelle
0

kmeans konvergieren zu lokalen Minima. Startpositionen spielen eine entscheidende Rolle für die optimale Anzahl von Clustern. Es wäre eine gute Idee, das Rauschen und die Abmessungen mit PCA oder anderen Techniken zur Dimensionsreduzierung zu reduzieren, um mit K-Methoden fortzufahren.

Nur um der Vollständigkeit halber hinzuzufügen. Es könnte eine gute Idee sein, eine optimale Anzahl von Clustern durch "Partitionierung um Medoide" zu erhalten. Dies entspricht der Silhouette-Methode.

Grund für die seltsamen Beobachtungen könnten unterschiedliche Startpunkte für unterschiedlich große Samples sein.

Nachdem alle oben genannten Punkte gesagt wurden, ist es wichtig, die Clusterfähigkeit des vorliegenden Datensatzes zu bewerten. Tractable Mittel ist durch Worst Pair-Verhältnis wie hier diskutiert Clustability .

    
RussellB 30.05.2017 14:34
quelle