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:
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.
Desafio
FácilUm 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.
- Ajuste o KMeans a
X: 3 clusters,n_init=10,random_state=0. - Faça um gráfico de dispersão de cada cluster como um grupo separado, identificado de
cluster 0acluster 2. - Marque os centros com estrelas pretas, identificadas como
centers. Adicione uma legenda e exiba o gráfico.
Assim, com outra baleia:
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
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
1Encontrando Grupos
Aprendendo sem RótulosMedindo a SimilaridadeK-Means à MãoK-Means no scikit-learnRevisão: Frequentadores da Academia4Clustering Hierárquico
Mesclando passo a passoModelos aglomerativosDendrogramasRevisão: raças de cães7PCA na prática
Visualizando 64 dimensõesComponentes como padrõesComprimir e reconstruirPCA antes de um modeloRecapitulação: scanner facial10Projeto: Explorando os Dígitos
Observe os DígitosReduza com PCAAgrupe os DígitosDê Nome aos GruposEncontre os Diferentes2Escolhendo k
InérciaO método do cotoveloPontuações de silhuetaEscale antes de agruparRecapitulando: zonas de entregaPratique por conta própria: Compilador de Python online