Python-Implementierung von K-Means-Clustering. k-means ist eine unbeaufsichtigte Lerntechnik, die versucht, ähnliche Datenpunkte in einer vom Benutzer angegebenen Anzahl von Gruppen zusammenzufassen. Das folgende Beispiel zeigt den Verlauf der Cluster für den Iris-Datensatz unter Verwendung des k-means++-Schwerpunktinitialisierungsalgorithmus.
k-means versucht, eine vom Benutzer angegebene k(<N) Anzahl von Clustern aus einem Satz von N d-dimensionalen Vektoren mit reellen Werten zu identifizieren. Der Algorithmus fährt fort, indem er versucht, die Summe der quadrierten Abstände von einem Clusterzentrum zu den Clustermitgliedern zu minimieren. Der kanonische Algorithmus läuft in drei Phasen ab:
Die Ausgabe des Algorithmus ist eine Clusterzuweisung für jeden Datenpunkt und eine endgültige Ebene der „Verzerrung“. Der Algorithmus erzeugt keine nachweislich optimale Lösung, und anfängliche Clusterzentren können dazu führen, dass der Algorithmus in einer lokal optimalen Lösung stecken bleibt, die eindeutig suboptimal ist (siehe das grundlegende 2D-Beispiel im Abschnitt „Ergebnisse“).
Viele Forschungsarbeiten konzentrierten sich auf Folgendes:
Anstatt wie in Schritt 1 oben zufällige Schwerpunkte zu initialisieren, verteilt k-means++ die anfänglichen Schwerpunkte probabilistisch, um eine schlechte Anfangskonfiguration zu vermeiden. Der Algorithmus lautet:
Diese Technik bevorzugt Datenpunkte, die nicht in der Nähe anderer Anfangsschwerpunkte liegen, und verwendet eine Auswahlrichtlinie, die an die Auswahl am Rouletterad (oder Fitness-Proportionalauswahl) erinnert, die häufig in genetischen Algorithmen verwendet wird.
K-Means wird in den Top 10 Algorithmen für Data Mining beschrieben;
K-Means wird in Informationstheorie, Inferenz und Lernalgorithmen beschrieben, Auszug hier;
Professor Andrew Moore von der CMU hat hier einige gute Anmerkungen;
Edureka-Beispiel unter Verwendung von Kriminalitätsdaten
K-Means++ und das vollständige Papier finden Sie hier
Eine vergleichende Studie effizienter Initialisierungsmethoden für den K-Means-Clustering-Algorithmus
SciPy verfügt über eine K-Means-Implementierung. Das Ziel dieser Arbeit besteht darin, eine reine Python-Implementierung zum Zweck des Lernens zu erstellen und anderen beim Erlernen des K-Means-Algorithmus zu helfen. Interessierte Leser mit nur minimaler Python-Erfahrung können diesen Code ohne die zusätzliche Komplexität einer Bibliothek wie SciPy lesen und überspringen. Es ist keinesfalls für den Produktionsgebrauch gedacht :)
Führen Sie den Code mit dem Python-Interpreter aus:
python kmeans.py ./resources/<config.cfg>
Wobei config.cfg eine Nur-Text-Konfigurationsdatei ist. Das Format der Konfigurationsdatei ist ein Python-Dikt mit den folgenden Feldern:
{
'data_file' : '\resources\iris.csv',
'data_project_columns' : ['sepal_length','sepal_width','petal_length','petal_width','class'],
'k' : 3,
'cluster_atts' : ['sepal_length','sepal_width','petal_length','petal_width'],
'init_cluster_func' : 'kmeans_plus_plus',
'plot_config' :
{'output_file_prefix' : 'iris',
'plots_configs': [
{'plot_atts' : ['sepal_length','sepal_width']},
{'plot_atts' : ['sepal_length','petal_length']},
{'plot_atts' : ['sepal_length','petal_width']},
{'plot_atts' : ['sepal_width','petal_length']},
{'plot_atts' : ['sepal_width','petal_width']},
{'plot_atts' : ['sepal_width','petal_width']}
]
}
}
Sie müssen Folgendes angeben:
Der Iris-Datensatz (iris.config) von Lichman, M. (2013). UCI-Repository für maschinelles Lernen. Irvine, CA: University of California, School of Information and Computer Science., ist ein sehr bekannter Datensatz in der Community des maschinellen Lernens. Hier sind die Ergebnisse meiner zufälligen anfänglichen Cluster:
Diese Daten wurden zu Debugging-Zwecken generiert (siehe basic2d.config) und veranschaulichen die Auswirkungen einer schlechten Auswahl an anfänglichen Zufallsclustern. Die folgenden Ergebnisse zeigen eine anfängliche Schwerpunktkonfiguration, die verhindert, dass der Algorithmus die offensichtliche Clusterzuweisung erreicht. In diesem Fall bedeutet die Platzierung des roten Schwerpunkts, dass der blaue Schwerpunkt alle Datenpunkte im unteren linken und unteren rechten Quadranten erfasst.
Der Kriminalitätsdatensatz (crime.config) stammt hier von Edureka.