SciPy - Cluster
K-means clusteringist eine Methode zum Auffinden von Clustern und Clusterzentren in einem Satz unbeschrifteter Daten. Intuitiv könnte man sich einen Cluster als - bestehend aus einer Gruppe von Datenpunkten vorstellen, deren Zwischenpunktabstände im Vergleich zu den Abständen zu Punkten außerhalb des Clusters gering sind. Bei einer anfänglichen Menge von K-Zentren wiederholt der K-Mittelwert-Algorithmus die folgenden zwei Schritte:
Für jedes Zentrum wird die Teilmenge der Trainingspunkte (sein Cluster) identifiziert, die näher daran liegt als jedes andere Zentrum.
Der Mittelwert jedes Merkmals für die Datenpunkte in jedem Cluster wird berechnet, und dieser Mittelwertvektor wird zum neuen Zentrum für diesen Cluster.
Diese beiden Schritte werden wiederholt, bis sich die Zentren nicht mehr bewegen oder sich die Zuordnungen nicht mehr ändern. Dann ein neuer Punktxkann dem Cluster des nächstgelegenen Prototyps zugeordnet werden. Die SciPy-Bibliothek bietet eine gute Implementierung des K-Means-Algorithmus über das Cluster-Paket. Lassen Sie uns verstehen, wie man es benutzt.
K-Means-Implementierung in SciPy
Wir werden verstehen, wie K-Means in SciPy implementiert werden.
K-Mittel importieren
Wir werden die Implementierung und Verwendung jeder importierten Funktion sehen.
from SciPy.cluster.vq import kmeans,vq,whiten
Datengenerierung
Wir müssen einige Daten simulieren, um das Clustering zu untersuchen.
from numpy import vstack,array
from numpy.random import rand
# data generation with three features
data = vstack((rand(100,3) + array([.5,.5,.5]),rand(100,3)))
Jetzt müssen wir nach Daten suchen. Das obige Programm erzeugt die folgende Ausgabe.
array([[ 1.48598868e+00, 8.17445796e-01, 1.00834051e+00],
[ 8.45299768e-01, 1.35450732e+00, 8.66323621e-01],
[ 1.27725864e+00, 1.00622682e+00, 8.43735610e-01],
…………….
Normalisieren Sie eine Gruppe von Beobachtungen pro Merkmal. Vor dem Ausführen von K-Means ist es vorteilhaft, jede Merkmalsdimension des Beobachtungssatzes mit Bleaching neu zu skalieren. Jedes Merkmal wird durch seine Standardabweichung über alle Beobachtungen geteilt, um eine Einheitsvarianz zu erhalten.
Weiß die Daten
Wir müssen den folgenden Code verwenden, um die Daten aufzuhellen.
# whitening of data
data = whiten(data)
Berechnen Sie K-Mittelwerte mit drei Clustern
Berechnen wir nun K-Means mit drei Clustern unter Verwendung des folgenden Codes.
# computing K-Means with K = 3 (2 clusters)
centroids,_ = kmeans(data,3)
Der obige Code führt K-Mittelwerte an einem Satz von Beobachtungsvektoren aus, die K-Cluster bilden. Der K-Means-Algorithmus passt die Schwerpunkte an, bis keine ausreichenden Fortschritte erzielt werden können, dh die Änderung der Verzerrung, da die letzte Iteration unter einem bestimmten Schwellenwert liegt. Hier können wir den Schwerpunkt des Clusters beobachten, indem wir die Schwerpunktvariable mit dem unten angegebenen Code drucken.
print(centroids)
Der obige Code generiert die folgende Ausgabe.
print(centroids)[ [ 2.26034702 1.43924335 1.3697022 ]
[ 2.63788572 2.81446462 2.85163854]
[ 0.73507256 1.30801855 1.44477558] ]
Weisen Sie jeden Wert einem Cluster zu, indem Sie den unten angegebenen Code verwenden.
# assign each sample to a cluster
clx,_ = vq(data,centroids)
Das vq Funktion vergleicht jeden Beobachtungsvektor im 'M' mit 'N' obsArray mit den Schwerpunkten und ordnet die Beobachtung dem nächsten Cluster zu. Es gibt den Cluster jeder Beobachtung und die Verzerrung zurück. Wir können auch die Verzerrung überprüfen. Lassen Sie uns den Cluster jeder Beobachtung mit dem folgenden Code überprüfen.
# check clusters of observation
print clx
Der obige Code generiert die folgende Ausgabe.
array([1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 2, 0, 2, 0, 1, 1, 1,
0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0,
0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 0, 0,
2, 2, 2, 1, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
Die unterschiedlichen Werte 0, 1, 2 des obigen Arrays geben die Cluster an.