Menu
CoddyTech

Modèles agglomératifs

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 17 sur 51.

Des voitures remplissent deux parkings, avec une file de voitures le long de la route qui les sépare. Deux façons de les regrouper en 2 clusters :

Deux graphiques représentant les mêmes 102 voitures. À gauche, liaison de Ward : le parking nord et le parking sud forment deux clusters de 53 et 49 voitures, la route étant répartie entre les deux. À droite, liaison simple : un cluster de 101 voitures et 1 voiture isolée

scikit-learn effectue les fusions. Indique où t'arrêter avec n_clusters :

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

linkage détermine à quelle distance se trouvent deux groupes :

  • "ward", la valeur par défaut : garde les groupes compacts
  • "complete" : leur paire la plus éloignée
  • "average" : la moyenne de toutes les paires
  • "single" : leur paire la plus proche

Single suit des chaînes : ici, la route engloutit les deux parkings. Ward forme des groupes ronds et réguliers.

challenge icon

Défi

Moyen

Les fraises des bois poussent en trois zones, ainsi que quelques-unes le long d’un chemin. Quelle méthode de liaison permet de trouver les zones ? plants contient leurs positions.

  1. Pour chaque méthode de liaison dans linkages, répartis les plants en 3 groupes.
  2. Affiche les tailles des groupes sous forme de liste, de la plus grande à la plus petite.
  3. Lorsque le groupe le plus grand contient plus de la moitié des plants, ajoute chained.

Pour une autre prairie :

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

Essayez vous-même

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

# Emplacement de 109 plants de fraisiers sauvages dans une prairie (en mètres) : trois groupes et un chemin
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"]

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne