Menu
CoddyTech

Dendrogrammes

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

L’arbre d’ouverture du chapitre est un dendrogramme. Chaque accolade relie deux groupes à la hauteur où ils ont fusionné : plus ses branches sont hautes, plus les groupes étaient éloignés.

Coupez-le avec une ligne, et chaque branche que la ligne traverse devient un groupe. Ici, 4 :

L’arbre des balles de sport avec une ligne pointillée à la hauteur 1.2. En dessous, quatre groupes : softball, cricket et baseball ; tennis, tennis de table et golf ; basketball seul ; volleyball, handball et football

scipy construit l’arbre, le dessine et le coupe avec fcluster :

from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
Z = linkage(scaled, "ward")
dendrogram(Z, labels=names, leaf_rotation=90, color_threshold=1.2, ax=ax)
ax.axhline(1.2, color="gray", linestyle="--")
groups = fcluster(Z, t=1.2, criterion="distance")
print(groups)

Cela affiche un numéro de groupe par balle, le ballon de basket seul :

[2 2 2 1 1 1 3 3 3 4]

Coupez les plus longs côtés : les groupes ci-dessous sont très éloignés.

challenge icon

Défi

Moyen

Un guide marin regroupe 16 baleines et dauphins selon leur longueur, leur poids et la profondeur de plongée. Le code de départ les met à l’échelle et lit la hauteur de coupe, cut.

  1. Construis l’arbre de Ward Z et dessine-le sur ax : les noms des animaux tournés à 90 degrés, les couleurs s’arrêtant à la coupe.
  2. Trace la coupe avec une ligne grise en pointillés, puis affiche le résultat.
  3. Affiche le nombre de groupes.

Pour 11 fruits et une coupe à 3.5 :

Cut at 3.5: 3 groups

Un arbre intitulé Fruits, avec les noms des feuilles orientés vers le haut et une ligne grise en pointillés à la hauteur 3.5 traversant trois branches colorées : citron, citron vert et fraise ; orange, pamplemousse et mangue ; raisin, cerise, banane, pomme et poire

Coddy décrit ton arbre.

Essayez vous-même

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster

# 16 baleines et dauphins : longueur du corps (m), poids (tonnes), profondeur maximale de plongée (m)
whales = pd.read_csv("whales.csv")
names = list(whales["animal"])
scaled = StandardScaler().fit_transform(whales[["length_m", "weight_t", "dive_m"]])
cut = float(input())

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3)  # espace pour les noms sous l’arbre
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# É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