Menu
CoddyTech

Estandarización

Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 49 de 64.

Muchos modelos aprenden mejor cuando cada característica está centrada en 0 y tiene una dispersión de 1. La estandarización hace eso: cada valor se convierte en su puntuación z dentro de su columna.

Cinco calabazas, peso en kg y ancho en cm:

Dos filas de puntos en una regla de desviaciones estándar: cinco pesos de calabaza de 8 a 40 kg y cinco anchos de 30 a 65 cm, cada fila centrada en su propia media en 0, todos entre -1.6 y 1.6

La difusión normaliza todas las columnas a la vez:

pumpkins = np.array([[30, 60],
                     [8, 30],
                     [22, 55],
                     [40, 65],
                     [15, 40]])
z = (pumpkins - pumpkins.mean(axis=0)) / pumpkins.std(axis=0)
print(np.round(z.mean(axis=0), 2))
print(np.round(z.std(axis=0), 2))

Esto imprime:

[0. 0.]
[1. 1.]

Redondea antes de comprobar: sin redondear, una media de 0 puede imprimirse como 2.22044605e-17, una pequeña cantidad de error de redondeo.

A diferencia de min-max, no hay un rango fijo: la mayoría de los valores se encuentran entre -2 y 2.

challenge icon

Desafío

Intermedio

Una granja lechera detecta vacas inusuales. Cada fila de cows corresponde a una vaca: leche (litros al día), peso (kg) y edad (años), cuyos nombres están en features. El programa lee la posición de una vaca, k.

  1. Completa standardize(X). Después, las líneas de comprobación imprimen [0. 0. 0.] y [1. 1. 1.].
  2. Encuentra la puntuación z de la vaca k que más se aleje de 0, sin tener en cuenta el signo, e imprímela como se muestra abajo, con 2 decimales.

Para una vaca de otra granja:

Column means: [0. 0. 0.]
Column stds: [1. 1. 1.]
Cow 2 stands out by weight: 1.76 std above the herd

Pruébalo tú mismo

import numpy as np

features = ["milk", "weight", "age"]
# Una fila por vaca: leche en litros por día, peso en kg, edad en años
cows = np.array([[28, 610, 6],
                 [22, 540, 3],
                 [35, 680, 6],
                 [31, 590, 9],
                 [19, 650, 4],
                 [26, 520, 2],
                 [30, 600, 7]])
k = int(input())


# Devuelve X con todas las columnas estandarizadas: media 0 y desviación estándar 1
def standardize(X):
    # Reemplaza la línea siguiente por la estandarización
    return X


# No cambies las tres líneas siguientes: comprueban tu función
z = standardize(cows)
print("Column means:", np.round(z.mean(axis=0), 2))
print("Column stds:", np.round(z.std(axis=0), 2))

# Escribe tu código a continuación: qué destaca de la vaca k
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 Estadística para ML

Practica por tu cuenta: Compilador de Python online