Menu
CoddyTech

Inercia

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 6 de 51.

Este capítulo trata sobre cómo elegir k. Al final, lo elegirás para las entregas de una panadería y trazarás las zonas:

Un mapa de las paradas de entrega de una ciudad's, con el este en km en el eje horizontal y el norte en metros en el eje vertical, dividido en tres zonas de 45, 40 y 25 paradas, cada una con una estrella negra en el centro

Primero, una puntuación. La inercia suma la distancia al cuadrado de cada punto hasta su propio centro: es pequeña cuando los puntos están cerca de sus centros.

36 manzanas en tres grupos, cada una unida al centro con forma de estrella negra de su grupo por un radio gris delgado. La inercia eleva al cuadrado la longitud de cada radio y las suma todas

KMeans lo guarda en inertia_. Para las 180 manzanas:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

Esto imprime:

1 1718
2 752
3 230
4 196

Más centros, radios más cortos: la inercia siempre disminuye a medida que k crece. Con un centro por punto es 0, así que el menor valor no es el mejor.

challenge icon

Desafío

Fácil

Una alfarería empaqueta jarrones en cajas de unos pocos tamaños. A cada jarrón se le asigna el tamaño más cercano; la inercia mide cuánto se ajustan. El programa lee budget, el mayor desajuste que acepta la alfarería.

  1. Prueba k = 1, 2, 3 y así sucesivamente: ajusta KMeans a vases e imprime la inercia de cada k, redondeada.
  2. Detente en el primer k cuya inercia esté dentro del presupuesto e imprímelo.

Para otra alfarería:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

Pruébalo tú mismo

import numpy as np
from sklearn.cluster import KMeans

# No cambies las líneas de abajo
rng = np.random.default_rng(8)
# Cuatro tipos de jarrones: altura y anchura típicas en cm, y cuántos hay de cada tipo
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 jarrones, uno por fila: altura y anchura en cm
vases = np.round(np.concatenate(parts), 1)

# El desajuste máximo, medido como inercia, que acepta la alfarería
budget = int(input())

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online