Menu
CoddyTech

Centros en unidades reales

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

El centro de un clúster es su miembro típico. K-means encontró los centros del parque en datos escalados, así que se expresan como puntuaciones z. Los mismos centros, antes y después:

Dos gráficos de los visitantes del parque temático con los 3 centros de clúster marcados con cruces. A la izquierda, ejes escalados: los centros se sitúan en números como 0.8, 1.3. A la derecha, unidades reales: los mismos centros en 6.8 horas y 13.9 atracciones, 6.0 y 6.2, 2.4 y 3.0

Conserva el escalador: recuerda la media y la dispersión de cada característica, e inverse_transform deshace el escalado:

scaler = StandardScaler()
km.fit(scaler.fit_transform(park))
centers = scaler.inverse_transform(km.cluster_centers_)
print(centers.round(1))

Esto imprime las horas, los viajes y la edad, una fila por clúster:

[[ 6.   6.2 38.4]
 [ 2.4  3.  45.8]
 [ 6.8 13.9 20.7]]

El centro del clúster 2 era 0.8 y 1.3. Ahora indica 6.8 horas y 13.9 viajes: el mismo punto, en unidades que una persona puede usar.

challenge icon

Desafío

Intermedio

Un fabricante de guantes convierte los grupos de manos en 4 tallas de guantes. El código inicial escala 150 manos, las agrupa y lee la mano de un cliente en new_hand.

  1. Encuentra el grupo al que se une la nueva mano: primero escálala.
  2. Convierte los centros de nuevo a cm.
  3. Imprime el centro de ese grupo con 1 decimal, como se muestra a continuación.

Para otro fabricante de guantes:

Your glove size: hand 20.3 cm, palm 8.9 cm, finger 8.6 cm

Pruébalo tú mismo

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# 150 manos medidas por un fabricante de guantes, en cm: longitud de la mano, anchura de la palma y longitud del dedo corazón
hands = pd.read_csv("hands.csv")
scaler = StandardScaler()
scaled = scaler.fit_transform(hands)
# Un grupo por talla de guante
km = KMeans(n_clusters=4, n_init=10, random_state=0)
km.fit(scaled)

# La mano de un nuevo cliente, en una tabla de una fila con las mismas columnas
new_hand = pd.DataFrame({
    "hand_cm": [float(input())],
    "palm_cm": [float(input())],
    "finger_cm": [float(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