La normalización en Machine Learning
ese detalle que te revienta el modelo cuando ya estabas celebrando
Mira, en el mundo del Machine Learning hay cosas que parecen de relleno. Como los créditos en una peli de Marvel. Nadie los ve… hasta que de pronto hay una escena clave ahí. Pues eso pasa con la normalización de datos.
Te cuento: estaba yo tan tranquilo entrenando un modelo para predecir precios de coches usados. Lo típico: edad del coche, kilómetros, número de puertas, precio... Y el jodido modelo no aprendía NADA. Cero. Como yo en clase de álgebra a las 8 de la mañana.
Después de mil vueltas, ¿sabes qué era? Que el kilometraje iba de 0 a 300.000 y el número de puertas de 2 a 5. Y claro, el modelo decía: "los kilómetros son Dios, lo demás... ruido". Lo normalicé con un simple MinMaxScaler y voilà. El modelo se puso gafas y empezó a ver claro. No es magia, es escala.
🧠 ¿Qué coño es normalizar?
Básicamente, es poner todas las variables a jugar en la misma liga. Porque si una va en Ferrari y otra en patinete, el modelo va a mirar al Ferrari aunque no tenga ni idea de fútbol, ¿me explico?
☕ ¿Cuándo la necesitas como el café por la mañana?
Redes neuronales, KNN, SVM, PCA, K-means, regresión logística… Si tu modelo usa distancias o gradientes, sin normalizar va como un borracho en patines.
¿Estás entrenando con descenso de gradiente? Pues normaliza, o prepárate para ver cómo tu modelo no converge ni en otra vida.
🧊 ¿Cuándo te la puedes saltar (más o menos)?
Árboles de decisión, Random Forest, XGBoost… Estos son como ese amigo que va a su bola. Les da igual si llevas zapatillas o tacones.
📐¿Cómo se hace?
Dos formas de poner orden en el caos:
Min-Max Scaling: todo entre 0 y 1. Ideal si eres de los que quiere ver todo ordenadito.
from sklearn.preprocessing import MinMaxScaler
Z-score (Estandarización): media 0, desviación 1. Como decirle al modelo: “eh, tranquilo, todo está centrado”.
from sklearn.preprocessing import StandardScaler
💻 Ejemplo de código:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import pandas as pd
data = pd.DataFrame({
"edad": [20, 30, 40, 50, 60],
"salario": [20000, 40000, 60000, 80000, 100000]
})
minmax = MinMaxScaler()
data_minmax = pd.DataFrame(minmax.fit_transform(data), columns=data.columns)
standard = StandardScaler()
data_standard = pd.DataFrame(standard.fit_transform(data), columns=data.columns)
print("Original:\n", data)
print("\nMin-Max:\n", data_minmax)
print("\nZ-score:\n", data_standard)
😵💫 Moraleja del día
La escala importa. Mucho. Ignorarla es como cocinar sin sal y luego quejarte de que todo te sabe a suela de zapato. Normaliza y dale al modelo una oportunidad de no hacer el ridículo.
Y ya que estamos, si este tipo de explicaciones te gustan, estoy preparando más sobre cagadas comunes en ML (de las que aprendes a hostias, pero mejor que aprendas con las mías).
¿Te gustaría que la próxima fuera sobre por qué estandarizar y normalizar NO son lo mismo?
Si te interesa, suscríbete al blog. Yo no se de ventas, aquí no hay funnels, ni campanitas, ni promesas de hacerte rico en 7 días. Solo contenido que a mi me funciona.
Si estás interesado en trabajar conmigo o necesitas ayuda personalizada, puedes ver mis servicios en Fiverr. Y no olvides conectarte conmigo en LinkedIn para estar al tanto de las últimas novedades y compartir tu camino.