Menu
CoddyTech

Modele aglomeracyjne

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 17 z 51.

Samochody zapełniają dwa parkingi, a między nimi wzdłuż drogi ciągnie się ich rząd. Dwa sposoby podziału na 2 klastry:

Dwa wykresy przedstawiające te same 102 samochody. Po lewej, metoda ward: północny parking i południowy parking to dwa klastry liczące odpowiednio 53 i 49 samochodów, a droga jest podzielona między nie. Po prawej, metoda single: jeden klaster z 101 samochodami i 1 samotny samochód

scikit-learn wykonuje scalanie. Określ, gdzie je zakończyć, za pomocą n_clusters:

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

linkage określa, jak daleko od siebie są dwie grupy:

  • "ward", domyślna wartość: utrzymuje grupy zwarte
  • "complete": ich najbardziej oddalona para
  • "average": średnia ze wszystkich par
  • "single": ich najbliższa para

Pojedyncze ogniwo podąża za łańcuchami: tutaj droga pochłania oba parkingi. Ward tworzy okrągłe, równe grupy.

challenge icon

Wyzwanie

Średni

Poziomki rosną w trzech skupiskach, a kilka rośnie wzdłuż ścieżki. Która metoda łączenia pozwala znaleźć te skupiska? plants zawiera ich pozycje.

  1. Dla każdej metody łączenia w linkages podziel rośliny na 3 grupy.
  2. Wypisz liczebność grup w postaci listy, zaczynając od największej.
  3. Gdy największa grupa obejmuje więcej niż połowę roślin, dodaj chained.

Dla innej łąki:

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

Spróbuj swoich sił

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

# Miejsca, w których rośnie 109 poziomek na łące (w metrach): trzy skupiska i ścieżka
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"]

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online