Python: Unüberwachtes Lernen: Nicht hierarchisches Clustering

Clustering-Technik

Hierarchisches Clustering

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.

image.png

Nicht hierarchisches Clustering

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.

k-bedeutet Methode

Datensammlung

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.

Über die k-means-Methode

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.

  1. 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.

  2. Ordnen Sie alle Datenpunkte dem nächsten Schwerpunkt zu.

  3. 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.

image.png

sklearns KMeans-Bibliothek

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])

Über SSE

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_)

Ellbogenmethode

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()

image.png

DBSCAN

DBSCAN-Algorithmus

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

Python: Unüberwachtes Lernen: Nicht hierarchisches Clustering
Unbeaufsichtigtes Lernen 2 nicht hierarchisches Clustering
Python: Unüberwachtes Lernen: Grundlagen
Python lernen
[Python] Lernnotiz 1
Python-Lernausgabe
Python-Lerntag 4
Python Deep Learning
Lernen ohne Lehrer 1 Grundlagen
Python-Lernen (Ergänzung)
Deep Learning × Python
Python-Lernnotizen
Clustertext in Python
Python-Klasse (Python-Lernnotiz ⑦)
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Python-Modul (Python-Lernnotiz ④)
Erweitertes Lernen 1 Python-Installation
Python lernen mit ChemTHEATER 05-1
Python: Deep Learning-Praxis
Python ~ Grammatikgeschwindigkeit lernen ~
Private Python-Lernprozedur
Python lernen mit ChemTHEATER 01
Python: Deep Learning Tuning
Python + Unity Enhanced Learning (Lernen)
Python: Überwachtes Lernen (Rückkehr)
Python: Überwachtes Lernen (Klassifizierung)
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
O'Reilly python3 Primer Lernnotiz
Lernablauf für Python-Anfänger
Ich habe mit Python Clustering & Dimension Compression & Visualization mit maschinellem Lernen begonnen
Python: Überwachtes Lernen: Hyperparameter Teil 1
Python-Lernplan für KI-Lernen
Verbessertes Lernen ab Python
Maschinelles Lernen mit Python! Vorbereitung
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
Lernnotizen zur Python-Datenanalyse
Python Machine Learning Programming> Schlüsselwörter
Python: Überwachtes Lernen: Hyperparameter Teil 2
Empfehlungssystem mit Matrixzerlegung [Unüberwachtes Lernen mit Python Kapitel 10]
Checkios Empfehlung zum Erlernen von Python
Iterative Verarbeitung von Python durch Chemoinfomatik gelernt
Lernen Sie mnist unbeaufsichtigt mit Auto Encoder und Cluster und werten Sie latente Variablen aus
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
Python-Steuerungssyntax, Funktionen (Python-Lernnotiz ②)
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Python + Unity Verbesserte Erstellung von Lernumgebungen