Menu
CoddyTech

Dendrogramas

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 18 de 51.

A árvore de abertura do capítulo é um dendrograma. Cada colchete une dois grupos na altura em que eles foram agrupados: quanto mais altas as hastes, mais distantes eles estavam.

Corte com uma linha, e cada ramo que a linha atravessar se torna um grupo. Aqui, 4:

A árvore de bolas esportivas com uma linha tracejada na altura 1.2. Abaixo dela, quatro grupos: softball, críquete e beisebol; tênis, tênis de mesa e golfe; basquete sozinho; vôlei, handebol e futebol

scipy constrói a árvore, desenha-a e a corta com 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)

Isso imprime um número de grupo por bola, apenas a bola de basquete:

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

Atravesse as pernas mais longas: os grupos abaixo estão muito distantes.

challenge icon

Desafio

Médio

Um guia marinho agrupa 16 baleias e golfinhos por comprimento, peso e profundidade de mergulho. O código inicial dimensiona os dados e lê a altura de corte, cut.

  1. Construa a árvore de Ward Z e desenhe-a em ax: nomes dos animais girados em 90 graus, com as cores terminando no corte.
  2. Desenhe o corte como uma linha tracejada cinza e, em seguida, exiba o gráfico.
  3. Imprima o número de grupos.

Para 11 frutas e um corte em 3.5:

Cut at 3.5: 3 groups

Uma árvore intitulada Frutas, com os nomes das folhas orientados para cima e uma linha tracejada cinza na altura 3.5, cruzando três ramos coloridos: limão, lima e morango; laranja, toranja e manga; uva, cereja, banana, maçã e pera

O Coddy descreve sua árvore.

Experimente você mesmo

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

# 16 baleias e golfinhos: comprimento do corpo (m), peso (toneladas), mergulho mais profundo (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)  # espaço para os nomes abaixo da árvore
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online