DBSCAN
Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 20 von 51.
In diesem Kapitel findest du Gruppen beliebiger Form und die Punkte, die zu keiner Gruppe gehören. Am Ende zeichnest du die Lichter eines Tals auf einer Karte ein:
Zuerst die Sandbänke der Robben, an denen k-means in „When K-Means Fails“ scheiterte. DBSCAN folgt stattdessen den Gruppen:
Ein Punkt, der innerhalb von eps, dem Radius des Kreises, min_samples Punkte (einschließlich sich selbst) hat, gehört zu einer Gruppe. Gruppen breiten sich über solche Punkte aus. Kein k muss ausgewählt werden:
from sklearn.cluster import DBSCAN
labels = DBSCAN(eps=0.2, min_samples=5).fit_predict(X)
print(labels.max() + 1)Dies gibt 2 aus: Menschenmengen werden ab 0 nummeriert, daher ergibt die größte Nummer plus eins ihre Anzahl.
Aufgabe
MittelAuf einem zugefrorenen See fahren Schlittschuhläufer auf einer Bahn, die sich zwischen zwei Inseln hindurchschlängelt, und eine Menschenmenge schaut einem Hockeyspiel zu. k-means würde die Bahn in Stücke zerschneiden. Das Programm liest eps in Metern ein.
- Führe DBSCAN mit diesem eps und
min_samples=5aus; speichere die Menschenmengen inlabels. - Gib aus, wie viele Menschenmengen gefunden wurden.
- Zeichne sie mit
draw_crowds(ax, X, labels)und zeige die Grafik an.
Für einen anderen See und eps 3.5:
Crowds found: 3Coddy beschreibt dein Diagramm. Führe es dann mit eps 8 aus: Wo sind die Menschenmengen geblieben?
Probier es selbst
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
# Positionen der 170 Schlittschuhläufer auf dem zugefrorenen See, in Metern
skaters = pd.read_csv("skaters.csv")
X = np.column_stack([skaters["x_m"], skaters["y_m"]])
eps = float(input())
# Zeichnet jede Gruppe in einer eigenen Farbe und beschriftet sie mit ihrer Größe
def draw_crowds(ax, X, labels):
for crowd in range(labels.max() + 1):
rows = labels == crowd
ax.scatter(X[rows, 0], X[rows, 1], s=14, label=f"{rows.sum()} skaters")
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Skaters on the Lake")
ax.set_xlabel("East (m)")
ax.set_ylabel("North (m)")
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Unüberwachtes Lernen
1Gruppen finden
Lernen ohne LabelsÄhnlichkeit messenK-Means von HandK-Means mit scikit-learnRückblick: Fitnessstudiomitglieder4Hierarchisches Clustering
Schrittweises ZusammenführenAgglomerative ModelleDendrogrammeZusammenfassung: Hunderassen7PCA in der Praxis
64 Dimensionen sehenKomponenten als MusterKomprimieren und rekonstruierenPCA vor einem ModellRückblick: Gesichtsscanner10Projekt: Ziffern erkunden
Die Ziffern ansehenMit PCA verkleinernDie Ziffern gruppierenDie Gruppen benennenDie Ausreißer finden2k wählen
TrägheitDie Elbow-MethodeSilhouettenwerteVor dem Clustering skalierenRückblick: LieferzonenÜbe selbstständig: Online-Python-Compiler