Menu
CoddyTech

Modelos aglomerativos

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

Carros ocupam dois estacionamentos, com uma fila de carros ao longo da estrada entre eles. Duas maneiras de agrupar em 2 clusters:

Dois gráficos dos mesmos 102 carros. À esquerda, ligação Ward: o estacionamento norte e o estacionamento sul são dois clusters de 53 e 49 carros, com a estrada dividida entre eles. À direita, ligação simples: um cluster de 101 carros e 1 carro isolado

O scikit-learn faz as junções. Indique onde parar com n_clusters:

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

linkage decide o quão distantes dois grupos estão:

  • "ward", o padrão: mantém os grupos compactos
  • "complete": o par mais distante entre eles
  • "average": a média de todos os pares
  • "single": o par mais próximo entre eles

O método Single segue cadeias: aqui, o caminho incorpora os dois estacionamentos. Ward forma grupos arredondados e equilibrados.

challenge icon

Desafio

Médio

Moranguinhos silvestres crescem em três agrupamentos, além de alguns ao longo de um caminho. Qual método de ligação encontra os agrupamentos? plants contém suas posições.

  1. Para cada método de ligação em linkages, agrupe as plantas em 3 grupos.
  2. Imprima os tamanhos dos grupos como uma lista, do maior para o menor.
  3. Quando o maior grupo tiver mais da metade das plantas, acrescente chained.

Para outro campo:

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

Experimente você mesmo

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

# Onde crescem 109 pés de morango silvestre em um campo (metros): três agrupamentos e um caminho
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"]

# 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