Menu
CoddyTech

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:

Eine Nachtkarte eines Tals: eine lang gestreckte, geschwungene Stadt, eine runde Stadt und ein kleines Dorf, jeweils in einer eigenen Farbe und mit einer eigenen Markierung, sowie 10 einzelne Lichter als graue x-Markierungen dazwischen

Zuerst die Sandbänke der Robben, an denen k-means in „When K-Means Fails“ scheiterte. DBSCAN folgt stattdessen den Gruppen:

Zwei Diagramme derselben 200 Robben auf zwei gebogenen Sandbänken. Links teilt k-means sie in eine linke und eine rechte Hälfte. Rechts findet DBSCAN jede Sandbank vollständig, mit einem kleinen Kreis mit der Beschriftung eps um eine Robbe

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.

challenge icon

Aufgabe

Mittel

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

  1. Führe DBSCAN mit diesem eps und min_samples=5 aus; speichere die Menschenmengen in labels.
  2. Gib aus, wie viele Menschenmengen gefunden wurden.
  3. Zeichne sie mit draw_crowds(ax, X, labels) und zeige die Grafik an.

Für einen anderen See und eps 3.5:

Crowds found: 3

Ein Diagramm mit dem Titel Skaters on the Lake: eine gewundene, S-förmige Bahn mit 150 Schlittschuhläufern in Blau, eine runde Menschenmenge mit 30 Personen in Orange oberhalb ihrer linken Kurve und eine Gruppe mit 22 Personen in Grün unterhalb ihrer rechten Kurve, mit einer Legende zu den Größen

Coddy 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
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Python-Compiler