Menu
CoddyTech

Modelli agglomerativi

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 17 di 51.

Le auto riempiono due parcheggi, con una fila di auto lungo la strada che li collega. Due modi per raggrupparle in 2 cluster:

Due grafici delle stesse 102 auto. A sinistra, linkage ward: il parcheggio a nord e quello a sud sono due cluster di 53 e 49 auto, con la strada divisa tra loro. A destra, linkage single: un cluster di 101 auto e 1 auto isolata

scikit-learn esegue la fusione. Indica dove fermarti con n_clusters:

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

linkage decide quanto sono distanti due gruppi:

  • "ward", il valore predefinito: mantiene i gruppi compatti
  • "complete": la coppia più distante
  • "average": la media di tutte le coppie
  • "single": la coppia più vicina

Single segue catene: qui la strada inghiotte entrambi i parcheggi. Ward crea gruppi rotondi e uniformi.

challenge icon

Sfida

Medio

Le fragoline di bosco crescono in tre gruppi, più alcune lungo un sentiero. Quale criterio di collegamento individua i gruppi? plants contiene le loro posizioni.

  1. Per ogni criterio di collegamento in linkages, raggruppa le piante in 3 gruppi.
  2. Stampa le dimensioni dei gruppi come elenco, dal più grande al più piccolo.
  3. Quando il gruppo più grande contiene più della metà delle piante, aggiungi chained.

Per un altro prato:

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

Provalo tu

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

# Dove crescono 109 piante di fragoline di bosco in un prato (metri): tre gruppi e un sentiero
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"]

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online