Puntuaciones de silueta
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 8 de 51.
La inercia siempre mejora al aumentar k, así que necesita un codo. La silueta plantea a cada punto una pregunta más justa: ¿estoy más cerca de mi propio grupo que del siguiente?
Un punto obtiene una puntuación de (b - a) / max(a, b): cerca de 1, está bien integrado en su grupo; cerca de 0, está en un límite; por debajo de 0, está en el grupo equivocado. El promedio puntúa una agrupación:
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 las manzanas, esto imprime:
2 0.534
3 0.657
4 0.545Alcanza su máximo en el mejor valor de k, aquí 3, donde los puntos parecen estar más cómodos.
Desafío
FácilDos pronosticadores no están de acuerdo sobre cuántos tipos de tormenta azotan su costa. El código inicial contiene 150 tormentas, el viento máximo y la lluvia, y lee primero la k de Ana y luego la de Ben.
- Calcula la puntuación de cada k mediante el coeficiente de silueta, con 3 decimales.
- Imprime cuál k se ajusta mejor.
- Imprime la mejor k entre 2 y 8, con su puntuación.
Para otra 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)Pruébalo tú mismo
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# No cambies las líneas siguientes
rng = np.random.default_rng(6)
# Cuatro tipos de tormenta: viento y lluvia típicos, y cuántas hay 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 tormentas en una costa, una por fila: viento máximo (m/s) y lluvia (mm por hora)
storms = np.round(np.concatenate(parts), 1)
# Los números de tipos de tormenta estimados por los dos meteorólogos
k_ana = int(input())
k_ben = int(input())
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje no supervisado
1Encontrar grupos
Aprender sin etiquetasMedir la similitudK-Means a manoK-Means en scikit-learnRepaso: miembros del gimnasio7PCA en la práctica
Visualizar 64 dimensionesComponentes como patronesComprimir y reconstruirPCA antes de un modeloRepaso: escáner facial10Proyecto: Explorador de dígitos
Observa los dígitosReduce con PCAAgrupa los dígitosPon nombre a los gruposEncuentra los diferentes2Elegir k
InerciaEl método del codoPuntuaciones de siluetaEscalar antes de agruparRepaso: zonas de entrega3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de téPractica por tu cuenta: Compilador de Python online