Pontuações de silhueta
Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 8 de 51.
A inércia sempre melhora com k, então precisa de um cotovelo. A silueta faz a cada ponto uma pergunta mais justa: estou mais perto do meu próprio grupo do que do próximo?
Um ponto recebe a pontuação (b - a) / max(a, b): perto de 1, bem ajustado ao seu grupo; perto de 0, na fronteira; abaixo de 0, no grupo errado. A média das pontuações avalia um agrupamento:
from sklearn.metrics import silhouette_score
for k in [2, 3, 4]:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(X)
print(k, f"{silhouette_score(X, km.labels_):.3f}")Para as maçãs, isso imprime:
2 0.534
3 0.657
4 0.545Ele atinge o pico no melhor k, aqui 3, onde os pontos parecem estar mais à vontade.
Desafio
FácilDois meteorologistas discordam sobre quantos tipos de tempestade atingem sua costa. O código inicial contém 150 tempestades, vento máximo e chuva, e lê o k de Ana e, depois, o de Ben.
- Avalie cada k pelo coeficiente de silhueta, com 3 casas decimais.
- Imprima qual k se ajusta melhor.
- Imprima o melhor k de 2 a 8, com sua pontuação.
Para outra costa:
Ana, k = 2: 0.512
Ben, k = 3: 0.574
Ben's k fits better
Best from 2 to 8: k = 3 (0.574)Experimente você mesmo
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Não altere as linhas abaixo
rng = np.random.default_rng(6)
# Quatro tipos de tempestade: vento e chuva típicos e quantas há de cada tipo
kinds = [(30, 8, 40), (12, 34, 35), (21, 21, 30), (11, 9, 45)]
parts = []
for w, r, n in kinds:
parts.append(np.column_stack([rng.normal(w, 2.5, n), rng.normal(r, 3, n)]))
# 150 tempestades em uma região costeira, uma por linha: velocidade máxima do vento (m/s) e chuva (mm por hora)
storms = np.round(np.concatenate(parts), 1)
# Os números de tipos de tempestade previstos pelos dois meteorologistas
k_ana = int(input())
k_ben = int(input())
# 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