Menu
CoddyTech

Dendrogramas

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 18 de 51.

El árbol inicial del capítulo es un dendrograma. Cada corchete une dos grupos a la altura a la que se fusionaron: cuanto más altas son sus ramas, más separados estaban.

Córtalo con una línea, y cada rama que cruce la línea se convierte en un grupo. Aquí, 4:

El árbol de pelotas deportivas con una línea discontinua a la altura de 1.2. Debajo, cuatro grupos: sóftbol, críquet y béisbol; tenis, tenis de mesa y golf; baloncesto solo; voleibol, balonmano y fútbol

scipy construye el árbol, lo dibuja y lo corta con 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)

Esto imprime un número de grupo por pelota, solo la de baloncesto:

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

Traza una línea que cruce los lados más largos: los grupos de abajo están muy separados.

challenge icon

Desafío

Intermedio

Una guía marina agrupa 16 ballenas y delfines por longitud, peso y profundidad de inmersión. El código inicial los escala y lee la altura de corte, cut.

  1. Construye el árbol de Ward Z y dibújalo en ax: nombres de los animales girados 90 grados y colores que se detienen en el corte.
  2. Dibuja el corte como una línea gris discontinua y luego muéstralo.
  3. Imprime el número de grupos.

Para 11 frutas y un corte en 3.5:

Cut at 3.5: 3 groups

Un árbol titulado Fruits, con los nombres de las hojas orientados hacia arriba y una línea gris discontinua a la altura 3.5 que cruza tres ramas coloreadas: limón, lima y fresa; naranja, pomelo y mango; uva, cereza, plátano, manzana y pera

Coddy describe tu árbol.

Pruébalo tú mismo

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

# 16 ballenas y delfines: longitud corporal (m), peso (toneladas), inmersión más profunda (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)  # espacio para los nombres debajo del árbol
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online