El método del codo
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 7 de 51.
Representa gráficamente la inercia frente a k. Mientras cada nuevo centro divide un grupo real, la inercia se desploma; después se aplana. El quiebre, el codo, es un buen valor de k:
Una regla práctica: detente cuando un centro más reduzca la inercia en menos de una cuarta parte. Las reducciones de las manzanas: 56%, después 69% y luego solo 15%. Así que k = 3:
ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")Una curva suave sin curvatura no muestra grupos claros. La siguiente lección introduce a un segundo juez.
Desafío
FácilUna aplicación para plantas organiza las plantas de interior en planes de cuidado según sus necesidades de luz y agua. El código inicial contiene las inercias de k from 1 to 8, un gráfico y cutoff.
- Empezando desde k = 1, detente cuando el siguiente valor de k reduzca la inercia en menos de
cutoff. Imprime ese valor de k. - Representa la inercia en función de k con puntos, una línea vertical discontinua en tu valor de k y muestra el gráfico.
Para otra aplicación, cutoff 0.25:
Care plans: 3Después, Coddy describe tu gráfico.
Pruébalo tú mismo
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# No cambies las líneas de abajo
rng = np.random.default_rng(17)
# Cuatro tipos de plantas: necesidades habituales de luz y agua, y cuántas hay de cada tipo
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 plantas de interior, una por fila: necesidades de luz y agua, puntuadas del 1 al 10
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)
# Inercia para k = 1 a 8, de Inertia
ks = list(range(1, 9))
inertias = []
for k in ks:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(plants)
inertias.append(km.inertia_)
cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")
# 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