Menu
CoddyTech

Por qué escalar las características

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

¿Qué cliente se parece más a uno nuevo? Muchos modelos miden la distancia entre muestras: elevan al cuadrado la diferencia de cada característica, las suman y calculan la raíz cuadrada.

Una persona de 25 años que gana $52,000 frente a una de 61 años que gana $53,000:

Dos barras que muestran cuánto aporta cada característica a la distancia entre los dos clientes: la edad, una diferencia de 36 años, aporta 1,296, una franja demasiado delgada para verla; los ingresos, una diferencia de $1,000, aportan 1,000,000, una barra larga

Para una tabla completa, axis=1 suma los cuadrados de cada fila y .argmin() encuentra la fila más cercana:

a = np.array([25, 52000])  # edad, ingresos
X = np.array([[61, 53000],   # la persona de 61 años
              [26, 55000]])  # una persona de 26 años que gana $55,000
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

Esto imprime:

[1000.65 3000.  ]
0

La persona de 61 años es la más cercana: las cantidades en dólares son mayores, así que $1,000 supera a 36 años. Sin escalar, las unidades más grandes son las que deciden.

Este capítulo da a cada característica la debida consideración.

challenge icon

Desafío

Intermedio

Una tienda compara lavadoras por precio ($), energía (kWh al año) y agua (litros por lavado), indicados en features. El programa lee las posiciones de dos máquinas, i y j. Imprime:

  1. Squared gaps: la diferencia de cada característica, elevada al cuadrado.
  2. Distance: redondeada a 2 decimales.
  3. Dominant feature: el nombre de la característica con la mayor diferencia al cuadrado.

Para otras dos máquinas:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

Pruébalo tú mismo

import numpy as np

features = ["price", "energy", "water"]
# Una fila por lavadora: precio en dólares, energía en kWh por año, agua en litros por lavado
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
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