Menu
CoddyTech

K-Means no scikit-learn

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

scikit-learn executa todo o loop de k-means para você, aqui em 180 maçãs avaliadas quanto à doçura e à crocância:

180 maçãs, com a doçura no eixo horizontal e a crocância no vertical, em três grupos, com uma estrela preta no centro de cada um: doces e crocantes no canto superior direito, macias na parte inferior, ácidas e crocantes no canto superior esquerdo. Uma nova maçã no canto superior direito se junta ao cluster 0

Ajuste apenas com X, sem y:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

Isso imprime os números dos clusters de 8 linhas e, em seguida, uma linha por centro:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

n_init=10 testa 10 inicializações e mantém a mais compacta. km.predict([[8.6, 9.2]]) atribui à nova maçã seu centro mais próximo, [0].

labels = km.fit_predict(X) faz as duas coisas de uma vez: ajusta e, em seguida, retorna labels_.

Os números são apenas nomes: em outros dados, o cluster 0 pode ser qualquer grupo.

challenge icon

Desafio

Fácil

Um biólogo registrou 150 mergulhos de uma baleia-jubarte: o tempo de mergulho e o descanso na superfície depois dele. Existem tipos diferentes de mergulho? O código inicial prepara o gráfico.

  1. Ajuste o KMeans a X: 3 clusters, n_init=10, random_state=0.
  2. Faça um gráfico de dispersão de cada cluster como um grupo separado, identificado de cluster 0 a cluster 2.
  3. Marque os centros com estrelas pretas, identificadas como centers. Adicione uma legenda e exiba o gráfico.

Assim, com outra baleia:

Um gráfico de dispersão intitulado Mergulhos de baleia, com os minutos de mergulho no eixo horizontal e o descanso na superfície no eixo vertical: três clusters, mergulhos curtos com descansos longos no canto superior esquerdo, mergulhos curtos com descansos curtos na parte inferior, mergulhos longos à direita, uma estrela preta em cada um e uma legenda

Coddy descreve seu gráfico.

Experimente você mesmo

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Não altere as linhas abaixo
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 mergulhos de uma baleia-jubarte: duração do mergulho e do descanso na superfície após cada um, em minutos
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

# 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