Einführung
In diesem Lab wird gezeigt, wie man hierarchische Clustering mit Verbindungsbedingungen mit der Scikit-learn-Bibliothek in Python durchführt. Beim hierarchischen Clustering werden Cluster durch rekursives Zusammenführen oder Teilen basierend auf der Distanz zwischen ihnen gebildet. Verbindungsbedingungen können verwendet werden, um die Bildung von Clustern aufgrund der Verbindungen zwischen Datenpunkten einzuschränken, was zu sinnvolleren Clustern führen kann.
Tipps für die VM
Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.
Daten generieren
Wir beginnen, indem wir den Swiss Roll-Datensatz mit der Funktion make_swiss_roll aus Scikit-learn generieren. Der Swiss Roll-Datensatz ist ein 3D-Datensatz mit einer spiralförmigen Gestalt.
from sklearn.datasets import make_swiss_roll
n_samples = 1500
noise = 0.05
X, _ = make_swiss_roll(n_samples, noise=noise)
## Make it thinner
X[:, 1] *= 0.5
Unstrukturiertes hierarchisches Clustering
Wir führen AgglomerativeClustering durch, das unter hierarchischem Clustering ohne jegliche Verbindungsbedingungen steht.
from sklearn.cluster import AgglomerativeClustering
ward = AgglomerativeClustering(n_clusters=6, linkage="ward").fit(X)
label = ward.labels_
Unstrukturierte hierarchische Cluster darstellen
Wir stellen die unstrukturierten hierarchischen Cluster mit der Bibliothek matplotlib dar.
import matplotlib.pyplot as plt
fig1 = plt.figure()
ax1 = fig1.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
ax1.scatter(
X[label == l, 0],
X[label == l, 1],
X[label == l, 2],
color=plt.cm.jet(float(l) / np.max(label + 1)),
s=20,
edgecolor="k",
)
Strukturiertes hierarchisches Clustering
Wir definieren die k-Nearest Neighbors mit 10 Nachbarn mit der Funktion kneighbors_graph aus Scikit-learn.
from sklearn.neighbors import kneighbors_graph
connectivity = kneighbors_graph(X, n_neighbors=10, include_self=False)
Wir führen erneut AgglomerativeClustering mit Verbindungsbedingungen durch.
ward = AgglomerativeClustering(
n_clusters=6, connectivity=connectivity, linkage="ward"
).fit(X)
label = ward.labels_
Strukturierte hierarchische Cluster darstellen
Wir stellen die strukturierten hierarchischen Cluster mit der Bibliothek matplotlib dar.
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
ax2.scatter(
X[label == l, 0],
X[label == l, 1],
X[label == l, 2],
color=plt.cm.jet(float(l) / np.max(label + 1)),
s=20,
edgecolor="k",
)
Zusammenfassung
In diesem Lab wurde gezeigt, wie man hierarchisches Clustering mit Verbindungsbedingungen mit der Scikit-learn-Bibliothek in Python durchführt. Zunächst haben wir den Swiss Roll-Datensatz generiert und unstrukturiertes hierarchisches Clustering durchgeführt. Anschließend haben wir die k-Nearest Neighbors mit 10 Nachbarn definiert und strukturiertes hierarchisches Clustering durchgeführt. Schließlich haben wir sowohl die unstrukturierten als auch die strukturierten hierarchischen Cluster mit der Bibliothek matplotlib dargestellt.