Menu
CoddyTech

Difusión

Parte de la sección Datos y gráficos del Journey de Machine Learning de Coddy. Lección 13 de 60.

Los modelos aprenden mejor cuando cada característica está alrededor de 0. Así que restas la media de cada columna a todos sus valores, y NumPy copia las medias en todas las filas:

La tabla de 3 por 2 de alturas y pesos, menos la fila de medias 170 y 70 copiada en las tres filas, es igual a la tabla centrada: 0 y -10, 10 y 10, -10 y 0

En código, para las alturas y los pesos de tres personas:

data = np.array([[170, 60],
                 [180, 80],
                 [160, 70]])
print(data - data.mean(axis=0))

Esto imprime:

[[  0. -10.]
 [ 10.  10.]
 [-10.   0.]]

Ese centrado es estandarización. La tabla ahora está centrada: cada valor indica a qué distancia se encuentra de la media de su columna.

Las medias tienen forma (2,): un valor por columna de la tabla (3, 2). Cualquier otra longitud provoca un error.

challenge icon

Desafío

Fácil

Una aplicación de fitness centra cada tabla antes del entrenamiento. El código inicial llama a center para dos tablas, users (3 características) y workouts (2), e imprime los resultados. Ahora mismo, center devuelve la tabla sin modificar.

Completa center para que reste la media de cada columna de esa columna, sea cual sea el número de columnas. Deja sin cambios las líneas que aparecen debajo.

Con dos usuarios y dos entrenamientos, el resultado tendría este aspecto:

Centered users:
[[-6.  7. -5.]
 [ 6. -7.  5.]]
Column means after centering: [0. 0. 0.]
Centered workouts:
[[-10. -90.]
 [ 10.  90.]]
Column means after centering: [0. 0.]

Pruébalo tú mismo

import numpy as np


def center(table):
    # Devuelve table con la media de cada columna restada
    # Escribe tu código a continuación
    return table


# Una fila por usuario: edad, frecuencia cardíaca en reposo, minutos de ejercicio al día
users = np.array([[25, 62, 30],
                  [31, 70, 45],
                  [40, 58, 20],
                  [29, 66, 25]])
# Una fila por entrenamiento: minutos, calorías quemadas
workouts = np.array([[30, 240],
                     [45, 410],
                     [20, 150],
                     [60, 520],
                     [35, 300]])

# No cambies las líneas siguientes
print("Centered users:")
print(center(users))
print("Column means after centering:", np.round(center(users).mean(axis=0), 2))
print("Centered workouts:")
print(center(workouts))
print("Column means after centering:", np.round(center(workouts).mean(axis=0), 2))
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 Datos y gráficos

Practica por tu cuenta: Compilador de Python online