Menu
CoddyTech

Agglomerative Modelle

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 17 von 51.

Autos füllen zwei Parkplätze, dazwischen verläuft eine Reihe von Autos entlang der Straße. Zwei Möglichkeiten, sie zu 2 Clustern zusammenzufassen:

Zwei Diagramme mit denselben 102 Autos. Links, Ward-Verknüpfung: Der nördliche Parkplatz und der südliche Parkplatz bilden zwei Cluster mit 53 und 49 Autos, die Straße ist zwischen ihnen aufgeteilt. Rechts, Single-Verknüpfung: ein Cluster mit 101 Autos und 1 einzelnes Auto

scikit-learn führt die Zusammenführung durch. Gib mit n_clusters an, wann gestoppt werden soll:

from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=2, linkage="ward")
labels = model.fit_predict(X)

linkage legt fest, wie weit zwei Gruppen voneinander entfernt sind:

  • "ward", die Standardeinstellung: hält Gruppen kompakt
  • "complete": ihr am weitesten voneinander entferntes Paar
  • "average": der Durchschnitt aller Paare
  • "single": ihr nächstes Paar

Single folgt Ketten: Hier verschluckt die Straße beide Parkplätze. Ward bildet runde, gleichmäßige Gruppen.

challenge icon

Aufgabe

Mittel

Walderdbeeren wachsen in drei Flecken sowie einige entlang eines Weges. Welche Verknüpfungsmethode findet die Flecken? plants enthält ihre Positionen.

  1. Fasse die Pflanzen für jede Verknüpfungsmethode in linkages in 3 Gruppen zusammen.
  2. Gib die Gruppengrößen als Liste aus, beginnend mit der größten.
  3. Wenn die größte Gruppe mehr als die Hälfte der Pflanzen enthält, füge chained hinzu.

Für eine andere Wiese:

ward: [40, 38, 31]
complete: [41, 37, 31]
average: [41, 37, 31]
single: [86, 22, 1] chained

Probier es selbst

import numpy as np
import pandas as pd
from sklearn.cluster import AgglomerativeClustering

# Standorte von 109 Walderdbeerpflanzen auf einer Wiese (in Metern): drei Gruppen und ein Pfad
rng = np.random.default_rng(4)
plants = np.round(np.concatenate([
    rng.normal([2, 3], 0.8, size=(40, 2)),
    rng.normal([9, 4], 1.0, size=(35, 2)),
    rng.normal([6, 10], 0.9, size=(25, 2)),
    np.column_stack([np.linspace(3, 8, 9), np.linspace(3.2, 4, 9)]) + rng.normal(0, 0.15, size=(9, 2)),
]), 2)
linkages = ["ward", "complete", "average", "single"]

# 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