Menu
CoddyTech

Escalado mín-máx

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

El escalado mín-máx da a cada característica la misma importancia: en cada columna, el valor más pequeño se convierte en 0, el más grande en 1 y los demás quedan entre ambos.

Añade a una persona de 40 años que gana $80,000 y después escala los cuatro:

Las edades y los ingresos de cuatro clientes en una tabla, una flecha y después la misma tabla escalada: en cada columna, el valor más pequeño pasó a ser 0.00 y el más grande, 1.00, con un tono más oscuro; los demás quedaron entre ambos

La difusión lo hace en una sola línea, con el valor mínimo y el rango propios de cada columna:

X = np.array([[25, 52000],
              [61, 53000],
              [26, 55000],
              [40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)

Ahora también cuenta la edad. El vecino más cercano del cliente 0 ya no es el de 61 años:

Los clientes escalados como puntos en un cuadrado de 0 a 1, con líneas desde el cliente 0: el de 26 años es el más cercano, a 0.11; el de 61 años está a 1.00 de distancia; quien gana $80,000 está a 1.08

Un valor extremo se convierte en 1 y comprime el resto cerca de 0, por lo que la normalización min-max es adecuada para columnas sin valores atípicos.

challenge icon

Desafío

Intermedio

Un tostador empareja cafés que se preparan de forma similar. Cada fila de beans es un café: temperatura del agua (C), tiempo de preparación (s) y cafeína (mg). El programa lee las posiciones i y j; la función inicial distance(a, b) mide la distancia entre dos muestras.

  1. Escala beans usando min-max.
  2. Imprime Every column from 0 to 1: y, después, la tabla escalada con 2 decimales.
  3. Imprime la distancia entre ellos antes y después del escalado, como se muestra a continuación.

Para otros tres cafés, las posiciones 0 y 1:

Every column from 0 to 1:
[[1.   1.   0.67]
 [0.5  0.5  0.  ]
 [0.   0.   1.  ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after

Pruébalo tú mismo

import numpy as np


# Devuelve la distancia entre dos muestras (de Why Scale Features)
def distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())


# Una fila por café: temperatura del agua en C, tiempo de preparación en segundos, cafeína en mg
beans = np.array([[88, 120, 60],
                  [96, 300, 30],
                  [86, 90, 70],
                  [94, 240, 120],
                  [90, 180, 90],
                  [84, 60, 50]])
i = int(input())
j = 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 Estadística para ML

Practica por tu cuenta: Compilador de Python online