Hierarchisches Clustering dient dazu, die ähnlichste Kombination in den Daten zu finden. Es ist eine Methode zum Clustering in der richtigen Reihenfolge und zeichnet sich durch eine hierarchische Struktur in der Mitte des Prozesses aus.
In der folgenden Abbildung finden Sie ein konkretes Beispiel. Es gibt 5 Datenpunkte A, B, C, D und E. Sammeln Sie die nächsten dieser fünf Daten Wir werden einen Cluster erstellen.
A,B,C,D,E
→ (A,B), C,D,E
In diesem Fall sind A und B die nächsten Punkte in der Kombination. Da es durch Berechnung beurteilt wurde, habe ich einen Cluster namens (A, B) erstellt.
Betrachten Sie als Nächstes den neu erstellten Cluster als einen Datenpunkt und wiederholen Sie diesen Vorgang.
→ (A,B), (C,D), E
→ (A,B,C,D), E
→ (A,B,C,D,E)
Wenn Sie schließlich den Cluster erreichen, der alle Daten sammelt, sind Sie fertig. Es ist eine Darstellung des Clusters, in dem die Datenpunkte zusammengefasst wurden. Wie in der rechten Abbildung unten gezeigt
Baum diagramm(Dendrogramm)ist.
Nicht hierarchisches Clustering sucht wie hierarchisches Clustering nach ähnlichen Eigenschaften aus Daten. Erstellt einen Cluster, hat jedoch keine hierarchische Struktur.
Aufgrund der Daten entscheidet der Entwickler im Voraus, wie viele Cluster geteilt werden sollen Erstellen Sie für diese paar Minuten einen Cluster aus den Daten.
Die optimale Anzahl von Clustern wird jedoch nicht für jede Daten bestimmt. Da es keine hierarchische Struktur hat, ist der Rechenaufwand im Vergleich zu hierarchischen Clustern gering. Dies ist eine effektive Methode, wenn die Datenmenge groß ist.
Eine typische Methode für nicht hierarchisches Clustering ist
k-bedeutet Methode.
In den Daten werden Cluster für die angegebene Anzahl von Clustern generiert
sklearn.in Datensätzen machen_Ich möchte Ihnen die Blobs-Funktion vorstellen.
# sklearn.Datensätze machen_Blobs importieren
from sklearn.datasets import make_blobs
#X hat eine Handlung(x,y)Y ist jedoch die Clusternummer, zu der der Plot gehört.
X,Y = make_blobs(n_samples=150, #Gesamtzahl der Datenpunkte
n_features=2, #Angabe der Standardmenge (Anzahl der Dimensionen):2
centers=3, #Anzahl der Cluster
cluster_std=0.5, #Standardabweichung innerhalb des Clusters
shuffle=True, #Probe mischen
random_state=0) #Geben Sie den Status des Zufallszahlengenerators an
Mit dem obigen Code ist X der Datenpunkt und Y die Bezeichnung des Clusters, zu dem der Datenpunkt gehört.
Ein typisches Beispiel für nicht hierarchisches Clustering ist die "k-means-Methode".
Die k-means-Methode ist eine Methode, die Daten mit gleicher Verteilung in n Cluster aufteilen kann. Jedem Cluster wird ein Durchschnittswert μ zugeordnet, der das Datenzentrum darstellt.
Dieser Schwerpunkt wird "Schwerpunkt" genannt. In Cluster mit gleicher Verteilung teilen
Wir verwenden einen Index namens "SSE".
SSE ist die Summe der Quadrate der Differenz zwischen den in jedem Cluster enthaltenen Datenpunkten und dem Schwerpunkt. (Es entspricht der Verteilung) Die k-means-Methode wählt Zentroide aus, um diese SSE über alle Cluster hinweg auszugleichen und zu minimieren.
Der Algorithmus der k-means-Methode besteht aus drei Schritten.
Extrahieren Sie zunächst kk-Datenpunkte (beliebige Anzahl) aus der Datengruppe und verwenden Sie diese kk-Punkte als anfänglichen Schwerpunkt. Wiederholen Sie nach dem Initialisieren des Schwerpunkts die beiden Schritte.
Ordnen Sie alle Datenpunkte dem nächsten Schwerpunkt zu.
Berechnen Sie als Nächstes den Schwerpunkt der Datengruppe, die jedem kk-Schwerpunkt zugeordnet ist, und aktualisieren Sie den Schwerpunkt als neuen Schwerpunkt.
Berechnen Sie nach jedem Schritt 3 den Abstand zwischen dem vorherigen und dem neuen Schwerpunkt. Wenn der Abstand bis zu einem gewissen Grad verringert wird, endet der obige iterative Prozess. Mit anderen Worten, iterieren Sie, bis der Centroid aktualisiert wird und fast feststeckt.
Unten finden Sie ein Beispiel für Daten, die nach der k-means-Methode geclustert wurden.
sklearn.Die KMeans-Klasse für Cluster
Suchen Sie den Cluster in den Daten und weisen Sie jedem Daten eine Clusternummer zu.
# sklearn.KMeans-Klasse für Cluster importieren
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, #Anzahl der Cluster
init="random", #Stellen Sie den Anfangswert der Centroid-Standardeinstellung nach dem Zufallsprinzip ein: "k-means++"
n_init=10, #K mit unterschiedlichen Anfangswerten der Schwerpunkte-Anzahl der Mittelausführungen
max_iter=300, # k-bedeutet Maximale Anzahl von Wiederholungen des Algorithmus
tol=1e-04, #Relative Toleranz zur Bestimmung der Konvergenz
random_state=0) #Initialisierung der zufälligen Generierung
Y_km = km.fit_predict(X) #Geben Sie die Daten ein, in denen der Cluster vorhanden ist, und ermitteln Sie die Clusternummer für jede Stichprobe
Suchen Sie die angegebene Anzahl von Clustern aus den Daten mit dem obigen Code Die Clusternummer wird für jede Probe automatisch in Y_km gespeichert. Es gibt viele andere Funktionen in der KMeans-Klasse.
#Führen Sie Clusterberechnungen durch
km.fit(X[, y])
#Führt eine Clusterberechnung durch, konvertiert X in den für die Analyse verwendeten Entfernungsraum und gibt zurück
km.fit_transform(X[, y])
#Gibt die in der Berechnung verwendeten Parameter zurück
km.get_params([deep])
#Gibt die Clusternummer zurück, zu der das X-Beispiel gehört
km.predict(X)
#Parameter einstellen
km.set_params(**params)
#Konvertieren Sie X in den für Analyse und Rückgabe verwendeten Entfernungsraum
km.transform(X[, y])
Eine der Funktionen zur Leistungsbewertung beim Clustering
SSE(Summe der quadratischen Fehler im Cluster)es gibt
Mithilfe von SSE kann die Leistung verschiedener k-Mittel-Cluster bewertet werden. Die SSE-Formel wird weggelassen, aber der SSE-Wert gibt an, wie weit die Werte im Cluster entfernt sind.
In sklearn bedeutet KMeans Trägheit_Sie können den Wert von SSE über das Attribut abrufen.
Denn die Summe der Abweichungen der einzelnen Daten vom Schwerpunkt des Clusters, zu dem sie gehören (verteilt), ist SSE Je kleiner der SSE-Wert ist, desto besser ist das Clustering-Modell.
#Greifen Sie auf die Summe der quadratischen Fehler im Cluster zu
print ("Distortion: %.2f"% km.inertia_)
Es gibt ein Problem bei der Entscheidung über die Anzahl der Cluster, die beim k-means-Clustering angegeben werden sollen.
Es gibt einige Techniken, die bei der Bestimmung dieser Anzahl von Clustern hilfreich sein können. das ist
Wird als Ellbogenmethode bezeichnet
Zeichnen Sie, wie sich die SSE mit zunehmender Anzahl von Clustern ändert
Aus dem Ergebnis k-Dies ist eine Methode zur Bestimmung der Anzahl von Mittelwertclustern.
Wie Sie durch Ausführen des folgenden Codes sehen können, gibt es einen Punkt, an dem sich der SSE-Wert stark verbiegt. Die Anzahl der Cluster zu diesem Zeitpunkt kann als das Optimum angesehen werden.
Weil die Form der Handlung so aussieht, als wäre der Ellbogen gebogen Es wird die Ellbogenmethode genannt.
In Wirklichkeit ist es jedoch so schön wie das Ergebnis des Problems. Es ist schwierig, ein Ellbogendiagramm zu erhalten, das das Diagramm deprimiert erscheinen lässt.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
#Generierung von Beispieldaten
X, Y = make_blobs(n_samples=150, n_features=2, centers=3,
cluster_std=0.5, shuffle=True, random_state=0)
distortions = []
for i in range(1, 11): #Anzahl der Cluster 1~Berechnen Sie 10 auf einmal
km = KMeans(n_clusters=i,
init="k-means++", # k-means++Wählen Sie das Cluster-Center nach Methode aus
n_init=10,
max_iter=300,
random_state=0)
km.fit(X) #Führen Sie das Clustering durch
distortions.append(km.inertia_) # km.fit und km.inertia_Kann erhalten werden
#Diagrammplot
plt.plot(range(1, 11), distortions, marker="o")
plt.xticks(np.arange(1, 11, 1))
plt.xlabel("Number of clusters")
plt.ylabel("Distortion")
plt.show()
DBSCAN
Ein weiterer nicht hierarchischer Clustering-Algorithmus für die k-means-Methode
Es gibt "DBS CAN".
Der "DBSCAN" -Algorithmus findet Orte mit hoher Dichte (Datenagglomeration) im Cluster. Erfassen Sie getrennt von Bereichen mit geringer Dichte. Es zeigt seinen wahren Wert, wenn die Clustergröße und -form verzerrt sind.
Die k-means-Methode wurde so gruppiert, dass so viele Daten wie möglich in der Mitte des Clusters gesammelt wurden. Daher nimmt der Cluster zwangsläufig eine Form in der Nähe eines Kreises an (sphärisch). Dies ist effektiv, wenn Größe und Form des Clusters nicht verzerrt sind. Eine gute Clusterbildung ist für Daten mit einer Abweichung in der Größe und Form des Clusters in der Regel unmöglich.
"DBS CAN" definiert zwei Parameter.
min_Samples und Eps.
Der "DBSCAN" -Algorithmus klassifiziert Datenpunkte in die folgenden drei Typen:
1.Kernpunkt
Min innerhalb des Radius eps einiger Daten_Datenpunkte, wenn so viele Daten wie eine Stichprobe vorhanden sind
2.Grenzpunkt
Daten, die kein Kernpunkt sind, sich jedoch innerhalb des Radius eps vom Kernpunkt befinden
3.Geräuschpunkt
Datenpunkte, die sich ebenfalls nicht erfüllen
Ein Cluster wird aus einer Sammlung von Kernpunkten gebildet.
Grenzpunkte werden dem Cluster zugewiesen, zu dem der nächstgelegene Kernpunkt gehört.
Auf diese Weise mit dem "DBSCAN" -Algorithmus Durch Klassifizierung aller Daten in 3 Daten Verzerrte Daten und nicht durchschnittliche Cluster können jetzt kategorisiert werden Sie können Rauschen auch korrekt entfernen.
"DBSCAN" kann die DBSCAN-Klasse von sklearn.cluster verwenden. Als Hauptparameter
eps、min_Geben Sie die Entfernungsberechnungsmethode nach Stichprobe und Metrik an.
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=0.2,
min_samples=5,
metric="euclidean")
Y_db = db.fit_predict(X)
Während die k-means-Methode für Daten mit komplexen Formen wie dieser anfällig ist, kann DBSCAN beliebige Formen gruppieren.
Recommended Posts