📖 Teoría

Machine Learning Clásico

Los algoritmos y las ideas que preceden al deep learning: regresión, clasificación, clustering y más. Contexto esencial para entender de dónde viene —y hacia dónde va— la inteligencia artificial.

🧠 ¿Qué es el Machine Learning?

El Machine Learning (aprendizaje automático) es una rama de la inteligencia artificial que permite a los sistemas aprender patrones a partir de datos, sin ser programados explícitamente para cada caso. En lugar de escribir reglas a mano ("si la temperatura > 30°, entonces…"), dejamos que el algoritmo descubra esas reglas por sí mismo.

La idea central es que un sistema puede mejorar su comportamiento con la experiencia. A diferencia de la programación convencional, donde el desarrollador codifica instrucciones paso a paso para cada situación posible, en ML proporcionamos ejemplos y dejamos que el algoritmo infiera las reglas subyacentes. Este cambio de paradigma ha transformado campos tan diversos como la medicina, las finanzas, la robótica y, por supuesto, la inteligencia artificial moderna.

🔑

Definición clásica (Tom Mitchell, 1997): Un programa aprende de la experiencia E con respecto a una tarea T y una medida de rendimiento P, si su rendimiento en T, medido por P, mejora con la experiencia E.

Programación tradicional vs Machine Learning

Datos + Reglas
Programa
Respuestas

Programación tradicional: tú escribes las reglas.

Datos + Respuestas
Algoritmo ML
Reglas (modelo)

Machine Learning: el algoritmo descubre las reglas.

Esto significa que ML brilla cuando las reglas son difíciles de codificar: reconocer caras, entender lenguaje natural, predecir el precio de una acción… problemas donde la complejidad es tan alta que un humano no puede especificar todas las casuísticas.

El campo del machine learning abarca una enorme variedad de algoritmos y técnicas, desde métodos estadísticos clásicos como la regresión lineal hasta sofisticados ensembles de modelos como XGBoost. Todos comparten un mismo principio: extraer conocimiento de los datos. A lo largo de este módulo veremos los algoritmos más importantes, sus fundamentos matemáticos y cuándo conviene usar cada uno. Estos conceptos son la base sobre la que se construye todo el deep learning moderno.

Breve historia del Machine Learning

1943
McCulloch y Pitts proponen el primer modelo matemático de neurona artificial, sentando las bases de las redes neuronales.
1957
Frank Rosenblatt inventa el Perceptrón, el primer algoritmo capaz de aprender a clasificar a partir de datos.
1967
Cover y Hart publican el algoritmo K-Nearest Neighbors, demostrando que un clasificador basado en proximidad puede ser sorprendentemente efectivo.
1986
Rumelhart, Hinton y Williams popularizan backpropagation para entrenar redes multicapa, abriendo la puerta al aprendizaje profundo.
1995
Cortes y Vapnik introducen las Support Vector Machines, que se convierten en el algoritmo dominante durante más de una década.
2001
Leo Breiman publica Random Forests. Los métodos ensemble se consolidan como la opción más fiable para datos tabulares.
2012
AlexNet gana ImageNet por un margen enorme, marcando el inicio de la revolución del Deep Learning.
2017+
Transformers (Vaswani et al., 2017), GPT, BERT… el deep learning escala y domina NLP, visión y generación de contenido.

Esta línea temporal muestra cómo el campo ha evolucionado desde modelos simples de neuronas hasta los grandes modelos de lenguaje actuales. Sin embargo, es importante destacar que los algoritmos de ML clásico no han quedado obsoletos: siguen siendo la mejor opción en multitud de escenarios prácticos, como veremos a lo largo de este módulo.

💡

¿Por qué importa esto si estudio deep learning? El deep learning es un subconjunto del ML. Muchas ideas que usamos a diario (funciones de pérdida, regularización, validación cruzada, overfitting) nacieron en el ML clásico. Además, en muchos problemas del mundo real, un Random Forest bien ajustado supera a una red neuronal sobrecomplicada.

📚 Tipos de aprendizaje

Los algoritmos de ML se clasifican según el tipo de supervisión que reciben durante el entrenamiento. Esta taxonomía es fundamental para elegir la técnica adecuada para cada problema.

Aprendizaje supervisado

El modelo aprende de pares (\mathbf{x}_i, y_i): entradas y sus etiquetas correctas. El objetivo es aprender una función f: \mathbf{X} \rightarrow Y que prediga correctamente en datos nuevos nunca vistos. Es el paradigma más utilizado en la práctica porque, cuando disponemos de datos etiquetados, ofrece los resultados más directos e interpretables.

Dentro del aprendizaje supervisado distinguimos dos grandes familias de problemas según la naturaleza de la variable objetivo:

  • Regresión: la etiqueta es un valor continuo (precio de una casa, temperatura, concentración de un fármaco).
  • Clasificación: la etiqueta es una categoría discreta (spam/no spam, especie de flor, diagnóstico médico).

A continuación se presentan algunos de los modelos supervisados más habituales. Cada uno se aborda en detalle en las secciones posteriores de este módulo.

📈
Regresión lineal
Predice valores continuos con una relación lineal entre las variables. Es la base conceptual de casi todo el ML.
SupervisadoRegresión
🔀
Regresión logística
Clasifica entre dos o más clases usando la función sigmoide (o softmax). Equivalente a un perceptrón.
SupervisadoClasificación
🌳
Árbol de decisión
Divide el espacio de features con reglas interpretables tipo if/else. Fácil de visualizar y explicar.
SupervisadoAmbos
🌲
Random Forest
Ensemble de muchos árboles que vota para decidir. Muy robusto y difícil de sobreajustar.
SupervisadoAmbos
📐
Support Vector Machine
Busca el hiperplano de separación con máximo margen. Potente con pocos datos gracias al kernel trick.
SupervisadoClasificación
🚀
Gradient Boosting
Ensemble secuencial (XGBoost, LightGBM) donde cada árbol corrige los errores del anterior. Domina en datos tabulares.
SupervisadoAmbos

Aprendizaje no supervisado

No hay etiquetas. El modelo busca estructura oculta en los datos: agrupaciones, relaciones, patrones de densidad. Es especialmente útil para exploración de datos, preprocesamiento y para obtener insights cuando no disponemos de datos etiquetados (algo muy frecuente en la práctica).

El aprendizaje no supervisado responde a preguntas como "¿existen grupos naturales en mis datos?", "¿puedo representar estos datos en menos dimensiones sin perder información relevante?" o "¿hay puntos que se comportan de forma anómala?". Los tres grandes tipos de problemas no supervisados son:

  • Clustering: agrupar datos similares (segmentar clientes, agrupar documentos, comprimir imágenes).
  • Reducción de dimensionalidad: comprimir features manteniendo la información esencial (visualización, preprocesamiento).
  • Detección de anomalías: encontrar datos que no encajan con el patrón normal (fraude, fallos industriales).
🎯
K-Means
Agrupa datos en K clusters minimizando distancias a centroides. El algoritmo de clustering más popular.
No supervisadoClustering
🔗
Clustering jerárquico
Construye un dendrograma que revela la estructura anidada de los datos. No requiere fijar K a priori.
No supervisadoClustering
🌐
DBSCAN
Detecta clusters de forma arbitraria basándose en la densidad local. Identifica outliers automáticamente.
No supervisadoClustering
📊
PCA
Encuentra las direcciones de máxima varianza para reducir dimensiones. Base del autoencoder lineal.
No supervisadoDim. reduction
🔍
t-SNE / UMAP
Técnicas no lineales para visualizar datos de alta dimensionalidad en 2D o 3D. Muy usadas en deep learning.
No supervisadoDim. reduction
🚨
Isolation Forest
Detecta anomalías aislando puntos con particiones aleatorias. Elegante, eficiente y escalable.
No supervisadoAnomalías

Aprendizaje por refuerzo

Un agente interactúa con un entorno, tomando acciones y recibiendo recompensas. El objetivo es aprender una política (una estrategia de comportamiento) que maximice la recompensa acumulada a lo largo del tiempo. A diferencia del aprendizaje supervisado, aquí no hay un "profesor" que indique la respuesta correcta: el agente debe descubrirla por ensayo y error.

Este paradigma ha demostrado resultados espectaculares: desde AlphaGo derrotando al campeón mundial de Go, hasta agentes que aprenden a controlar robots o conducir vehículos autónomos. Las técnicas clave incluyen Q-Learning, Policy Gradient y PPO, entre otras.

🎮

En este módulo nos centramos en aprendizaje supervisado y no supervisado. El aprendizaje por refuerzo es un campo fascinante que merece un tratamiento en profundidad. Puedes explorarlo en detalle en el submódulo dedicado de Aprendizaje por Refuerzo →, dentro del módulo de Otros Modelos de Deep Learning, donde se cubren Q-Learning, Policy Gradient, PPO y aplicaciones prácticas.

¿Y el semi-supervisado y el auto-supervisado?

Semi-supervisado: combina pocos datos etiquetados con muchos datos sin etiquetar. Útil cuando etiquetar es costoso (radiografías médicas, por ejemplo).

Auto-supervisado: el modelo genera sus propias etiquetas a partir de los datos. Es la base de modelos como BERT (predice palabras enmascaradas) y modelos de visión como DINO. Se considera una forma de aprendizaje no supervisado, pero la frontera es difusa.

Estos paradigmas son cada vez más relevantes en deep learning. GPT, por ejemplo, se entrena de forma auto-supervisada: predice la siguiente palabra en una secuencia de texto.

⚖️ Machine Learning vs Deep Learning

El deep learning es un subconjunto del machine learning que utiliza redes neuronales con muchas capas (deep = profundas). Pero, ¿cuándo usar ML clásico y cuándo DL?

Inteligencia Artificial Machine Learning Deep Learning
Jerarquía: IA ⊃ ML ⊃ DL. El deep learning es un caso especial de machine learning.

Tabla comparativa

Aspecto ML Clásico Deep Learning
Feature engineering Manual: tú diseñas las features relevantes Automático: la red aprende representaciones
Cantidad de datos Funciona bien con pocos datos (cientos-miles) Necesita muchos datos (miles-millones)
Interpretabilidad Alta (árboles, regresión → explicas por qué) Baja (redes profundas → "caja negra")
Coste computacional Bajo (CPU suficiente en la mayoría de casos) Alto (GPUs, TPUs, semanas de entrenamiento)
Datos tabulares Generalmente superior (XGBoost, RF ganan en Kaggle) Mejorando (TabNet), pero sigue detrás
Imágenes / texto / audio Features manuales (HOG, TF-IDF, MFCC) Dominante (CNN, Transformers, etc.)
Escalabilidad Rendimiento se satura con más datos Mejora continuamente con más datos

Regla práctica: empieza siempre con ML clásico para tener un baseline. Si no consigues suficiente rendimiento, o si trabajas con datos no estructurados (imágenes, texto), pasa a deep learning. Un buen data scientist domina ambos mundos.

⚠️

Importante: las siguientes pautas son orientativas, no reglas absolutas. En la práctica, la mejor elección depende del problema concreto, los datos disponibles, las restricciones de tiempo y recursos, y la experiencia del equipo. Hay problemas con imágenes donde un modelo clásico con buenas features funciona mejor que una red neuronal mal configurada, y hay problemas tabulares donde una red neuronal especializada supera a XGBoost. Usa estas guías como primera orientación, pero valida siempre con experimentación.

¿Cuándo elegir ML clásico?

  • Tienes pocos datos (< 10.000 muestras).
  • Necesitas interpretabilidad (medicina, finanzas, legal).
  • Trabajas con datos tabulares (hojas de cálculo, bases de datos SQL).
  • Tu presupuesto computacional es limitado.
  • Quieres un prototipo rápido para validar una idea.

¿Cuándo elegir Deep Learning?

  • Tienes mucho dato no estructurado (imágenes, texto, audio, vídeo).
  • El feature engineering manual es imposible o impracticable.
  • Necesitas rendimiento estado del arte (SOTA).
  • Puedes permitirte el coste computacional y el tiempo de desarrollo.

🔄 El pipeline de Machine Learning

Independientemente del algoritmo que elijas, todo proyecto de ML sigue un flujo de trabajo estándar. Entender este pipeline es tan importante como entender los algoritmos en sí, porque un modelo brillante aplicado sobre datos mal preparados o evaluado incorrectamente no sirve de nada. De hecho, la mayoría de los fracasos en proyectos de ML no se deben a la elección del algoritmo, sino a errores en las etapas de datos, preprocesamiento o evaluación.

El pipeline típico consta de seis grandes etapas, y en la práctica el proceso es iterativo: es muy habitual volver atrás para recoger más datos, probar otro preprocesamiento o cambiar de modelo después de evaluar los resultados.

1. Datos
2. EDA
3. Preproceso
4. Modelo
5. Evaluación
6. Deploy

Veamos cada etapa con más detalle:

1. Recolección de datos

Todo proyecto de ML empieza con los datos. Antes de pensar en algoritmos, necesitas definir qué datos necesitas y de dónde los vas a obtener. Las fuentes pueden ser muy diversas: bases de datos internas, APIs públicas, web scraping, sensores IoT, encuestas, datasets abiertos (Kaggle, UCI ML Repository, HuggingFace Datasets), o incluso generación sintética de datos.

La calidad de los datos es, con diferencia, el factor que más impacta en el resultado final. Un modelo sofisticado entrenado con datos ruidosos o sesgados dará peores resultados que un modelo simple entrenado con datos limpios y representativos. El mantra del campo es "garbage in, garbage out": si los datos de entrada son basura, la salida también lo será.

2. Análisis exploratorio (EDA)

Antes de entrenar cualquier modelo, es imprescindible entender los datos. El análisis exploratorio (Exploratory Data Analysis) consiste en visualizar distribuciones, calcular estadísticas descriptivas, detectar correlaciones entre variables, identificar valores faltantes (NaN), localizar outliers y comprobar si las clases están desbalanceadas.

Herramientas como pandas, matplotlib, seaborn y plotly son fundamentales en esta etapa. Un buen EDA te ahorrará horas de frustración posterior: muchas veces, los problemas de rendimiento de un modelo se deben a cuestiones que se habrían detectado con una buena exploración inicial.

3. Preprocesamiento

Los datos rara vez llegan listos para entrenar un modelo. El preprocesamiento incluye múltiples pasos: limpieza (gestión de valores faltantes, eliminación de duplicados, corrección de errores), transformación (normalización, estandarización, transformaciones logarítmicas), encoding de variables categóricas (one-hot encoding, label encoding, target encoding) y feature engineering (creación de nuevas variables a partir de las existentes).

El feature engineering es un arte en sí mismo y suele marcar la diferencia entre un modelo mediocre y uno excelente. Por ejemplo, en un problema de predicción de ventas, transformar la fecha en features como "día de la semana", "es festivo" o "días hasta fin de mes" puede mejorar radicalmente el rendimiento del modelo.

4. Entrenamiento del modelo

Con los datos preparados, es momento de elegir uno o varios algoritmos y entrenarlos. Esto incluye dividir los datos en conjuntos de train, validación y test (se explica en la siguiente sección), entrenar el modelo y ajustar sus hiperparámetros. Técnicas como grid search, random search o optimización bayesiana permiten explorar el espacio de hiperparámetros de forma sistemática.

Una buena práctica es empezar con un modelo sencillo (regresión lineal, árbol de decisión) como baseline y luego probar modelos más complejos para comprobar si la ganancia en rendimiento justifica la complejidad adicional.

5. Evaluación

Medir el rendimiento del modelo con las métricas adecuadas es crucial. No todas las métricas son iguales: en un problema de detección de fraude donde el 99.9% de las transacciones son legítimas, un modelo que siempre prediga "no fraude" tendría un 99.9% de accuracy pero sería completamente inútil. Por eso, hay que elegir métricas alineadas con el objetivo del negocio: precision, recall, F1-score, AUC-ROC para clasificación; MSE, MAE, R² para regresión. La validación cruzada proporciona estimaciones más robustas del rendimiento real.

6. Despliegue y monitorización

Un modelo que no se despliega en producción no genera valor. Las opciones de despliegue incluyen APIs REST (con frameworks como FastAPI o Flask), procesamiento por lotes (batch), o integración en aplicaciones existentes. Pero el trabajo no termina ahí: hay que monitorizar el rendimiento del modelo en producción, porque los datos del mundo real cambian con el tiempo (fenómeno conocido como data drift o concept drift). Un modelo de predicción de ventas entrenado antes de una pandemia, por ejemplo, dejará de ser válido cuando el contexto cambie radicalmente.

🧪

Herramienta interactiva: ¿No tienes claro qué métrica usar? Experimenta con datos generados en tiempo real y compara métricas de regresión, clasificación binaria y multiclase en el Explorador de Métricas de Evaluación →

⚠️

La regla del 80/20: en un proyecto real de ML, ~80% del tiempo se va en las etapas 1-3 (datos, EDA, preproceso) y solo ~20% en modelado. Los datos son el ingrediente más importante.

Train / Validation / Test

Nunca evalúes un modelo con los mismos datos con los que lo entrenaste. Esta es probablemente la regla más importante de todo el machine learning. Si usas los mismos datos para entrenar y evaluar, obtendrás una estimación falsamente optimista del rendimiento: el modelo habrá memorizado los datos de entrenamiento (incluido su ruido) y parecerá que funciona bien, cuando en realidad puede fallar estrepitosamente con datos nuevos.

La solución es dividir el dataset en tres subconjuntos disjuntos, cada uno con un propósito diferente:

~60-70%
Train
~15-20%
Validation
~15-20%
Test
  • Train (entrenamiento): el modelo aprende de estos datos. Es el subconjunto más grande porque necesitamos la mayor cantidad de datos posible para que el modelo capture los patrones subyacentes.
  • Validation (validación): se usa durante el desarrollo para ajustar hiperparámetros, comparar distintos modelos y detectar overfitting. Puedes evaluar sobre este conjunto tantas veces como necesites.
  • Test (prueba): evaluación final y definitiva. Este conjunto simula datos completamente nuevos. Solo se usa una única vez al final del proyecto, cuando ya has tomado todas las decisiones de diseño. Si lo usas repetidamente para tomar decisiones, deja de ser una estimación fiable del rendimiento real.

Las proporciones exactas dependen del tamaño del dataset. Con pocos miles de muestras, una división 70/15/15 es habitual. Con millones de datos (como en muchos problemas de deep learning), dedicar un 1-2% a validación y test puede ser más que suficiente porque la estimación ya es estadísticamente robusta.

Data leakage: el error más peligroso

El data leakage (fuga de datos) ocurre cuando información del conjunto de test o validación se "filtra" al proceso de entrenamiento, inflando artificialmente las métricas. Es uno de los errores más comunes y más difíciles de detectar en proyectos de ML. Algunas formas habituales de data leakage:

  • Preprocesamiento antes de dividir: si calculas la media y desviación estándar de todo el dataset para normalizar, y luego divides en train/test, la normalización del train contiene información del test. Lo correcto es dividir primero y luego normalizar usando solo las estadísticas del train.
  • Features que contienen la respuesta: a veces, una variable del dataset contiene información que solo estaría disponible después de conocer el resultado. Por ejemplo, incluir "importe del tratamiento" como feature para predecir si un paciente será hospitalizado.
  • Datos duplicados entre conjuntos: si un mismo registro aparece en train y test, el modelo lo memoriza y el rendimiento en test se infla.
  • Datos temporales desordenados: en series temporales, si no respetas el orden cronológico y usas datos futuros para predecir el pasado, estás introduciendo un leak temporal. En estos casos se debe usar una división temporal (los datos más recientes como test).
⚠️

Regla de oro: el conjunto de test debe ser tratado como si no existiera hasta el momento final de evaluación. Cualquier decisión (selección de features, ajuste de hiperparámetros, elección de modelo) que se tome mirando el test set compromete la validez de tus resultados. En competiciones como Kaggle, el test set está oculto precisamente por esta razón.

Cuando tienes pocos datos, dividir en train/val/test puede no ser fiable: una sola división puede dar resultados optimistas o pesimistas dependiendo de qué datos caigan en cada conjunto. La validación cruzada K-Fold soluciona este problema dividiendo los datos en K partes iguales (folds) y entrenando K veces, usando cada fold como validación una vez.

El resultado es K métricas de rendimiento cuya media te da una estimación más fiable, y cuya desviación estándar indica la estabilidad del modelo. Los valores más comunes son K = 5 o K = 10. Para datasets muy pequeños, existe también el Leave-One-Out (LOO), donde K = N.

Variantes especializadas como Stratified K-Fold (mantiene las proporciones de clases en cada fold) y Time Series Split (respeta el orden temporal) son imprescindibles en problemas con clases desbalanceadas o datos secuenciales.

📈 Regresión lineal y polinómica

La regresión lineal es probablemente el algoritmo más importante de todo el ML —no porque sea el más potente, sino porque es la base conceptual de casi todo lo que viene después, incluido el deep learning. Si entiendes la regresión lineal, entiendes el 80% de cómo funciona una red neuronal.

La regresión lineal formaliza una idea simple: predecir un valor numérico como una combinación lineal ponderada de las variables de entrada. Aunque su capacidad expresiva es limitada (solo captura relaciones lineales), su sencillez matemática la convierte en el punto de partida ideal para entender conceptos que se reutilizan en todo el ML: funciones de coste, optimización por gradiente descendente, regularización y generalización.

El modelo

Dado un vector de entrada \mathbf{x} = (x_1, x_2, \ldots, x_d), el modelo predice:

Regresión lineal \displaystyle \hat{y} = \mathbf{w}^T\mathbf{x} + b = w_1 x_1 + w_2 x_2 + \cdots + w_d x_d + b

donde \mathbf{w} son los pesos (weights) y b es el sesgo (bias). ¿Te suena? Es exactamente lo que hace una neurona sin función de activación (o con activación lineal).

🔑

Conexión con deep learning: una red neuronal de una sola neurona sin activación es una regresión lineal. El perceptrón es una regresión lineal + función de activación. La regresión lineal entrena minimizando MSE con gradiente descendente… exactamente como una red neuronal.

Función de coste: MSE

Entrenamos buscando los parámetros que minimizan el Error Cuadrático Medio:

MSE \displaystyle J(\mathbf{w}, b) = \frac{1}{N}\sum_{i=1}^{N}\left(\hat{y}_i - y_i\right)^2

En regresión lineal, esta función tiene un único mínimo global (es convexa), por lo que existe una solución analítica (la ecuación normal). Pero en la práctica, cuando hay millones de features, se usa gradiente descendente… igual que en DL.

Regresión polinómica

Si la relación entre x e y no es lineal, podemos crear nuevas features: x^2, x^3, \ldots y seguir usando regresión lineal sobre las features transformadas. El modelo sigue siendo "lineal en los parámetros", pero la predicción es una curva.

Polinómica \displaystyle \hat{y} = w_0 + w_1 x + w_2 x^2 + \cdots + w_p x^p
⚠️

Cuidado con el grado: un polinomio de grado muy alto se ajusta perfectamente a los datos de entrenamiento pero generaliza mal (overfitting). Un grado muy bajo no captura la relación (underfitting). Este equilibrio es el bias-variance tradeoff.

🧪 Regresión lineal y polinómica interactiva

Ajusta el ruido, el número de puntos y el grado del polinomio. Observa cómo un grado alto se ajusta demasiado al ruido (overfitting) y un grado bajo no captura la tendencia (underfitting).

0.20
30
✅ Ventajas
  • Muy rápida de entrenar y predecir
  • Altamente interpretable
  • Base para entender redes neuronales
  • Funciona bien con pocos datos
❌ Limitaciones
  • Asume relación lineal (o polinómica)
  • Sensible a outliers
  • No captura interacciones complejas
  • Regularización necesaria con muchas features

🔀 Regresión logística y clasificación

A pesar de su nombre, la regresión logística es un algoritmo de clasificación. Es la extensión natural de la regresión lineal para problemas donde la salida es binaria (0 o 1, sí o no, spam o no spam). Su importancia va más allá del ML clásico: como veremos, la capa de salida de cualquier red neuronal de clasificación binaria es una regresión logística, y entenderla es requisito para comprender el perceptrón y las redes neuronales en general.

Del valor continuo a la probabilidad

La idea es pasar la combinación lineal \mathbf{w}^T\mathbf{x} + b por la función sigmoide para obtener una probabilidad entre 0 y 1:

Sigmoide \displaystyle \hat{y} = \sigma\left(\mathbf{w}^T\mathbf{x} + b\right) = \frac{1}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}}

Si \hat{y} \geq 0.5, clasificamos como clase 1; si no, clase 0. Ese umbral (0.5) se puede ajustar según las necesidades del problema.

🔑

Conexión con deep learning: la regresión logística es exactamente un perceptrón con activación sigmoide. La capa de salida de una red de clasificación binaria ES una regresión logística. Y la función de pérdida que usa (cross-entropy) es la misma que se usa en redes neuronales de clasificación.

Función de pérdida: Binary Cross-Entropy

BCE \displaystyle J = -\frac{1}{N}\sum_{i=1}^{N}\left[y_i \log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)\right]

Esta pérdida penaliza mucho las predicciones confiadas pero incorrectas. Si el modelo predice \hat{y} = 0.99 pero la verdad es y = 0, la pérdida es enorme (-\log(0.01) \approx 4.6).

🧪

Herramienta interactiva: Explora visualmente MSE, MAE, Huber, Cross-Entropy, Focal Loss y muchas más funciones de pérdida con datos generados en tiempo real en el Explorador de Funciones de Pérdida →

Frontera de decisión

La regresión logística traza una frontera lineal (un hiperplano) que separa las clases. Esto funciona bien cuando las clases son linealmente separables, pero falla en casos más complejos.

Clasificación multiclase: Softmax

Cuando tenemos K clases, usamos softmax en lugar de sigmoide. Para cada clase k:

P(y = k | x) = exp(z_k) / Σⱼ exp(zⱼ)

donde z_k = \mathbf{w}_k^T\mathbf{x} + b_k. Softmax convierte un vector de scores en una distribución de probabilidad. Es exactamente lo que hace la última capa de clasificación en redes neuronales como ResNet, BERT, GPT…

🌳 Árboles de decisión y Random Forests

Los árboles de decisión son quizás el algoritmo de ML más intuitivo: funcionan como una secuencia de preguntas tipo "¿Feature X ≤ umbral?" que van dividiendo los datos hasta llegar a una predicción. Son el modelo que más se parece a cómo pensamos los humanos.

Su gran ventaja es la interpretabilidad: puedes visualizar el árbol, seguir las reglas y explicar exactamente por qué el modelo tomó una decisión concreta. Esto los hace especialmente valiosos en dominios donde la explicabilidad es requisito legal o ético, como medicina, finanzas o justicia. Además, son la pieza fundamental de los métodos de ensemble (Random Forest, Gradient Boosting) que dominan los problemas con datos tabulares.

¿Cómo funcionan?

El algoritmo construye un árbol binario eligiendo, en cada nodo, la feature y el umbral que mejor separa los datos. ¿Mejor según qué criterio?

  • Gini impurity (clasificación): mide cuán "mezcladas" están las clases. G = 1 - \sum_{k=1}^{K} p_k^2. Perfecto = 0, máximo desorden = 0.5 (binario).
  • Entropía (clasificación): H = -\sum_{k} p_k \log_2 p_k. Similar a Gini pero basada en teoría de la información.
  • MSE (regresión): el árbol divide para minimizar la varianza dentro de cada hoja.

Visualización interactiva

🧪 Árbol de decisión — estructura

Ajusta la profundidad máxima del árbol y observa cómo crece exponencialmente. Cada nodo azul es una decisión (feature ≤ umbral) y cada hoja es una predicción (clase A o B).

3

El problema: overfitting

Un árbol sin restricciones crecerá hasta que cada hoja tenga un solo dato → accuracy 100% en train, pero generalización terrible. Técnicas para controlarlo:

  • Profundidad máxima (max_depth): limitar cuántos niveles puede tener.
  • Mínimo de muestras (min_samples_split): no dividir si hay pocos datos.
  • Poda (pruning): eliminar ramas que no mejoran significativamente.

Random Forests: el poder del ensemble

Un Random Forest soluciona el overfitting de los árboles individuales con una idea brillantemente simple: entrenar muchos árboles independientes y promediar (regresión) o votar (clasificación) sus predicciones.

💡

¿Por qué funciona? Cada árbol se entrena con un subconjunto aleatorio de datos (bagging) y un subconjunto aleatorio de features. Esto hace que los árboles sean diversos y que sus errores se cancelen al promediar. Es la "sabiduría de la multitud" aplicada a modelos.

Bootstrap: para cada árbol, seleccionar N muestras con reemplazo del dataset original.

Feature subsampling: en cada split, considerar solo un subconjunto aleatorio de features (típicamente \sqrt{d} para clasificación).

Entrenar el árbol: sin poda, dejando que crezca completamente.

Repetir: generar 100-1000 árboles de esta forma.

Agregar: la predicción final es la media (regresión) o el voto mayoritario (clasificación).

✅ Ventajas de Random Forest
  • Muy robusto contra overfitting
  • Funciona bien "out of the box"
  • Feature importance gratis
  • Maneja datos faltantes y no lineales
  • Pocas decisiones de hiperparámetros
❌ Limitaciones
  • Menos interpretable que un árbol solo
  • Más lento en predicción (muchos árboles)
  • No extrapola bien fuera del rango de los datos
  • No captura relaciones secuenciales

Mientras Random Forest entrena árboles en paralelo, Gradient Boosting los entrena secuencialmente: cada nuevo árbol corrige los errores del anterior. Es como entrenar una red neuronal por capas, donde cada capa aprende el residuo de las anteriores.

XGBoost, LightGBM y CatBoost son implementaciones optimizadas que dominan competiciones de datos tabulares en Kaggle. En la mayoría de problemas con datos estructurados, gradient boosting supera tanto a redes neuronales como a Random Forest.

📐 Support Vector Machines (SVM)

Las Support Vector Machines buscan el hiperplano que separa las clases con el máximo margen posible. La idea es elegante: de todos los hiperplanos que separan las clases, elegir el que deja más "espacio" entre las dos, maximizando la robustez.

Las SVM fueron el algoritmo dominante en aprendizaje automático durante más de una década (aproximadamente 1995-2012), especialmente en problemas de clasificación con pocos datos y alta dimensionalidad. Su formulación matemática como un problema de optimización convexa garantiza encontrar el óptimo global (a diferencia de las redes neuronales), y el kernel trick les permite manejar fronteras de decisión no lineales de forma elegante y computacionalmente eficiente.

Margen máximo

Los vectores de soporte (support vectors) son los puntos más cercanos al hiperplano de separación. Son los que "definen" la frontera. El margen es la distancia entre el hiperplano y los vectores de soporte más cercanos de cada clase.

Hiperplano \displaystyle \mathbf{w}^T\mathbf{x} + b = 0

La optimización busca maximizar \frac{2}{\|\mathbf{w}\|} (el margen) sujeto a que todos los puntos estén correctamente clasificados. Es un problema de optimización convexa con restricciones.

El truco del kernel

¿Qué pasa cuando los datos no son linealmente separables? SVM tiene un arma secreta: el kernel trick. Transforma los datos a un espacio de mayor dimensionalidad donde sí son separables, pero sin calcular explícitamente esa transformación.

  • Lineal: K(\mathbf{x}, \mathbf{z}) = \mathbf{x}^T\mathbf{z}
  • Polinómico: K(\mathbf{x}, \mathbf{z}) = (\mathbf{x}^T\mathbf{z} + c)^d
  • RBF (Gaussiano): K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma\|\mathbf{x}-\mathbf{z}\|^2)
💡

SVM vs Deep Learning: SVM fue el rey de la clasificación antes de 2012. Todavía funciona muy bien con pocos datos y features diseñadas a mano. Pero con datos no estructurados (imágenes, texto) y muchos datos, las redes neuronales lo superan al aprender las features automáticamente.

✅ Ventajas
  • Muy efectivo en alta dimensionalidad
  • Funciona bien con pocos datos
  • El kernel trick es muy potente
  • Robusto contra overfitting (maximiza margen)
❌ Limitaciones
  • No escala bien con muchos datos (≫ 100K)
  • Sensible a la elección de kernel e hiperparámetros
  • No da probabilidades directamente
  • Difícil de interpretar con kernels complejos

🎯 K-Nearest Neighbors (KNN)

KNN es el algoritmo más intuitivo de todos: para clasificar un punto nuevo, busca los K vecinos más cercanos en el dataset de entrenamiento y asigna la clase mayoritaria (o promedia los valores en regresión). No hay "entrenamiento" propiamente dicho —el modelo simplemente memoriza todos los datos.

Por eso se le llama un lazy learner (aprendiz perezoso): no aprende un modelo explícito durante el entrenamiento, sino que difiere todo el cómputo al momento de la predicción. Esto lo hace instantáneo de "entrenar" pero lento de predecir, especialmente con datasets grandes. A pesar de su simplicidad, KNN puede ser sorprendentemente efectivo en problemas de baja dimensionalidad y con suficientes datos, y sirve como un excelente baseline no paramétrico contra el que comparar modelos más complejos.

El algoritmo

Almacenar todos los datos de entrenamiento (no hay fase de entrenamiento real).

Calcular distancias entre el punto nuevo y todos los puntos de entrenamiento (Euclidiana, Manhattan, Minkowski…).

Seleccionar los K puntos más cercanos.

Votar (clasificación) o promediar (regresión) las etiquetas de esos K vecinos.

Distancia Euclidiana \displaystyle d(\mathbf{x}, \mathbf{z}) = \sqrt{\sum_{j=1}^{d}(x_j - z_j)^2}

🧪 Fronteras de decisión — clasificación KNN

Observa cómo KNN (k=5) traza fronteras de decisión complejas para distintos datasets. A diferencia de la regresión logística, KNN puede crear fronteras no lineales.

El hiperparámetro K

  • K pequeño (ej. K=1): muy sensible al ruido, fronteras complejas → overfitting.
  • K grande (ej. K=50): fronteras suaves pero puede perder detalle → underfitting.
  • K óptimo: se elige por validación cruzada. Una regla heurística es K \approx \sqrt{N}.
⚠️

Maldición de la dimensionalidad: KNN funciona mal en alta dimensionalidad. En un espacio de 1000 dimensiones, todos los puntos están "lejos" unos de otros, y la noción de "vecino cercano" pierde sentido. Esto es una motivación para la reducción de dimensionalidad (PCA, t-SNE).

✅ Ventajas
  • Sin fase de entrenamiento (lazy learner)
  • Muy intuitivo y fácil de entender
  • Fronteras de decisión flexibles
  • Funciona bien con pocas features
❌ Limitaciones
  • Predicción lenta (calcula distancias en cada query)
  • Maldición de la dimensionalidad
  • Sensible a la escala de las features
  • Necesita mucha memoria (almacena todos los datos)

🔮 Clustering: K-Means y más

El clustering (agrupamiento) es la tarea estrella del aprendizaje no supervisado: dado un conjunto de datos sin etiquetas, encontrar grupos naturales de puntos similares. Aplicaciones: segmentación de clientes, agrupación de documentos, compresión de imágenes, descubrimiento de genes co-expresados, análisis de redes sociales…

La idea es intuitiva: los puntos dentro de un mismo cluster deben ser más similares entre sí que a los puntos de otros clusters. Sin embargo, formalizar esta intuición matemáticamente no es trivial, y distintos algoritmos lo hacen de formas muy diferentes: algunos buscan clusters esféricos (K-Means), otros detectan regiones de alta densidad (DBSCAN) y otros construyen jerarquías de agrupaciones (clustering jerárquico).

K-Means: el algoritmo más popular

K-Means divide los datos en K clusters minimizando la distancia intra-cluster. Su nombre viene de que busca K medias (centroides) alrededor de las cuales se agrupan los datos.

Inicializar: elegir K puntos aleatorios como centroides iniciales.

Asignar: cada punto se asigna al centroide más cercano (distancia Euclidiana).

Actualizar: recalcular cada centroide como la media de los puntos asignados.

Repetir pasos 2-3 hasta que los centroides no cambien (convergencia).

Objetivo K-Means \displaystyle J = \sum_{k=1}^{K}\sum_{\mathbf{x}_i \in C_k} \|\mathbf{x}_i - \boldsymbol{\mu}_k\|^2

donde \boldsymbol{\mu}_k es el centroide del cluster C_k. Este objetivo se llama inercia o within-cluster sum of squares (WCSS).

🧪 K-Means paso a paso

Observa cómo el algoritmo K-Means converge iterativamente. Los círculos grandes con cruz son los centroides. Usa "Paso" para avanzar una iteración o "Ejecutar" para ver la convergencia completa.

3

¿Cómo elegir K?

Método del codo (Elbow method): calcula la inercia (WCSS) para distintos valores de K y busca el "codo" donde la reducción se hace marginal. Es el método más popular pero a veces el codo no es claro.

Silhouette score: mide cuán similar es cada punto a su cluster vs al cluster más cercano. Valores entre -1 y 1; más alto = mejor. Busca el K que maximiza el silhouette medio.

Gap statistic: compara la inercia con la que se esperaría de datos uniformes aleatorios. Más riguroso estadísticamente pero más costoso de computar.

⚠️

Limitaciones de K-Means: asume clusters esféricos de tamaño similar, es sensible a la inicialización (se usa K-Means++ para mitigar esto) y al número de clusters elegido. Para clusters de forma arbitraria, usa DBSCAN o clustering jerárquico.

Otros métodos de clustering

🔗
Clustering jerárquico
Construye un dendrograma que muestra la estructura anidada de los clusters. No necesita fijar K a priori.
No supervisado
🌐
DBSCAN
Detecta clusters de forma arbitraria basándose en la densidad. Identifica automáticamente outliers.
No supervisado
🎲
Gaussian Mixture
Modela cada cluster como una distribución gaussiana. Permite clusters elípticos y asignaciones probabilísticas.
No supervisado

📊 Reducción de dimensionalidad

Los datasets modernos pueden tener miles de features (genes, píxeles, palabras…). La reducción de dimensionalidad comprime estas features a un número menor, manteniendo la información esencial. Es crucial para visualización, preprocesamiento y combatir la maldición de la dimensionalidad.

En el contexto del deep learning, la reducción de dimensionalidad es ubicua: cada capa de una red neuronal aprende una representación comprimida de los datos. Los autoencoders son la generalización no lineal de PCA al deep learning. Entender PCA y t-SNE te dará una base sólida para comprender cómo las redes neuronales aprenden representaciones internas.

PCA: Análisis de Componentes Principales

PCA (Principal Component Analysis) encuentra las direcciones de máxima varianza en los datos. La primera componente principal (PC1) captura la mayor varianza posible, PC2 captura la mayor varianza restante (ortogonal a PC1), y así sucesivamente.

PCA \displaystyle \mathbf{z} = \mathbf{W}^T(\mathbf{x} - \boldsymbol{\mu})

donde \mathbf{W} contiene los eigenvectors (autovectores) de la matriz de covarianza, ordenados por su eigenvalue (autovalor) correspondiente. Los eigenvalues indican cuánta varianza captura cada componente.

🔑

Conexión con deep learning: PCA es una reducción lineal de dimensionalidad. Un autoencoder con una capa oculta lineal y loss MSE aprende exactamente lo mismo que PCA. Los autoencoders profundos con activaciones no lineales son la versión "deep" de PCA, capaces de capturar estructuras mucho más complejas.

🧪 PCA en 2D — componentes principales

Ajusta la correlación entre las dos variables y observa cómo PCA encuentra las direcciones de máxima varianza. Activa "Mostrar proyección" para ver cómo se proyectan los puntos sobre PC1.

0.70

t-SNE: visualización no lineal

t-SNE (t-distributed Stochastic Neighbor Embedding) es un algoritmo de reducción de dimensionalidad diseñado específicamente para visualización en 2D/3D. A diferencia de PCA (que es lineal), t-SNE puede revelar estructuras no lineales complejas.

  • Convierte distancias entre puntos en probabilidades de vecindad.
  • Minimiza la divergencia KL entre las distribuciones en alta y baja dimensionalidad.
  • Usa una distribución t de Student (colas pesadas) en baja dimensionalidad para evitar el "crowding problem".
💡

En deep learning, t-SNE es ubicuo: se usa para visualizar los embeddings aprendidos por redes neuronales. Si entrenas un modelo de clasificación de imágenes, puedes extraer las representaciones de la penúltima capa y visualizarlas con t-SNE. Los puntos del mismo clase deberían agruparse.

⚠️

Cuidado con t-SNE: las distancias globales no se preservan (solo las locales), el resultado depende del hiperparámetro perplexity, y ejecutarlo varias veces da resultados distintos. Úsalo para exploración visual, no para sacar conclusiones cuantitativas. Alternativa moderna: UMAP, más rápido y con mejor preservación de la estructura global.

Aspecto PCA t-SNE UMAP
Tipo Lineal No lineal No lineal
Velocidad Muy rápido Lento (O(N²)) Rápido
Preserva Varianza global Estructura local Local + algo global
Determinista No No
Uso principal Preprocesamiento + visualización Visualización Visualización + preprocesamiento

🚨 Detección de anomalías

La detección de anomalías (outlier detection) identifica datos que se desvían significativamente del patrón normal. Es un caso especial de aprendizaje no supervisado (o semi-supervisado) con aplicaciones críticas: fraude financiero, detección de intrusiones en ciberseguridad, mantenimiento predictivo en industria, control de calidad en fabricación, y detección de enfermedades raras en medicina.

Lo que hace especial a la detección de anomalías es que nos interesa lo que no es normal, y definir "normalidad" a partir de los datos es el reto central. Los métodos más efectivos aprenden un modelo de lo que es "normal" y marcan como anómalo todo aquello que no encaja.

¿Por qué no usar clasificación supervisada?

Porque las anomalías son, por definición, raras. Si solo el 0.01% de las transacciones son fraudulentas, entrenar un clasificador supervisado es extremadamente difícil: las clases están totalmente desbalanceadas. Además, las anomalías futuras pueden ser muy diferentes a las pasadas.

Enfoques principales

📏
Basado en distancia
Puntos lejanos a sus vecinos (KNN para anomalías). Si la distancia media a los K vecinos más cercanos es grande → anomalía.
No supervisado
📊
Basado en densidad (LOF)
Compara la densidad local de un punto con la de sus vecinos. Si un punto está en una zona de baja densidad → anomalía.
No supervisado
🌲
Isolation Forest
Construye árboles aleatorios. Las anomalías se aíslan en pocos splits (cerca de la raíz) porque son "diferentes" al resto.
No supervisado
🔄
Autoencoder
Entrena una red para reconstruir datos normales. Si el error de reconstrucción es alto → anomalía. Técnica de deep learning.
No supervisadoDeep Learning
💡

Anomalías + Deep Learning: los autoencoders son una de las técnicas más potentes para detección de anomalías. Entrenas la red para reconstruir datos "normales"; cuando le pasas una anomalía, el error de reconstrucción es alto porque la red nunca aprendió a reconstruir ese tipo de dato. Variational Autoencoders (VAE) y GANs también se usan para este propósito.

Isolation Forest: la idea clave

Isolation Forest es probablemente el algoritmo más elegante para anomalías:

Seleccionar una feature al azar y un umbral al azar.

Dividir los datos en dos partes según ese umbral.

Repetir recursivamente hasta aislar cada punto.

Medir la profundidad promedio necesaria para aislar cada punto.

Las anomalías se aíslan rápidamente (pocos splits) porque son puntos "diferentes" al resto. Los puntos normales, al ser similares entre sí, necesitan muchos más splits para separarse. El anomaly score es inversamente proporcional a la profundidad de aislamiento.

⚖️ Bias-Variance y generalización

El tradeoff bias-varianza es posiblemente el concepto más importante de todo el machine learning. Entenderlo te da una intuición profunda sobre por qué los modelos fallan y cómo solucionarlo, tanto en ML clásico como en deep learning.

Imagina que entrenas el mismo tipo de modelo muchas veces, cada vez con un subconjunto ligeramente distinto de los datos. Un modelo con alto bias dará predicciones consistentes pero sistemáticamente alejadas de la realidad (se equivoca siempre en la misma dirección). Un modelo con alta varianza dará predicciones muy diferentes según los datos de entrenamiento (es inestable, se adapta demasiado a cada dataset particular). El objetivo es encontrar el equilibrio: un modelo lo suficientemente complejo para capturar el patrón real, pero no tanto como para memorizar el ruido.

El error de generalización se descompone

El error esperado de un modelo sobre datos nuevos se puede descomponer en tres componentes:

Descomposición \displaystyle \text{Error} = \text{Bias}^2 + \text{Varianza} + \text{Ruido irreducible}
  • Bias (sesgo): error por simplificar demasiado el problema. Un modelo con alto bias no captura la relación real → underfitting. Ejemplo: usar regresión lineal para datos cuadráticos.
  • Varianza: error por ser demasiado sensible a los datos de entrenamiento. Un modelo con alta varianza memoriza el ruido → overfitting. Ejemplo: un árbol de decisión sin poda.
  • Ruido irreducible: la incertidumbre intrínseca de los datos. No podemos hacer nada al respecto.
🔑

El dilema: al aumentar la complejidad del modelo, el bias baja pero la varianza sube. Al simplificar, la varianza baja pero el bias sube. El punto óptimo está en el equilibrio. Toda la teoría de regularización (L1, L2, Dropout, Early Stopping) existe para controlar este tradeoff.

🧪 Tradeoff Bias-Varianza

Mueve el slider de complejidad del modelo y observa cómo cambian el bias², la varianza y el error total. El punto óptimo está donde el error total es mínimo.

Moderado

Ejemplos prácticos del tradeoff

Modelo Bias Varianza Diagnóstico típico
Regresión lineal Alto Bajo Underfitting si la relación es no lineal
KNN (K=1) Bajo Alto Memoriza todo, incluido el ruido
Árbol profundo Bajo Alto Overfitting extremo sin poda
Random Forest Bajo Bajo Ensemble reduce varianza manteniendo bajo bias
Red neuronal profunda Bajo Variable Dropout, early stopping, data augmentation…

Técnicas para combatir el overfitting

Tanto en ML clásico como en deep learning, estas estrategias reducen la varianza y mejoran la capacidad de generalización del modelo. Aquí las presentamos de forma general; muchas de ellas se ven en mucho más detalle y aplicadas específicamente a deep learning en el submódulo de Regularización dentro del módulo de Técnicas de Entrenamiento.

  • Más datos: siempre es la mejor solución (cuando es posible). Al tener más ejemplos, el modelo tiene menos oportunidad de memorizar y se ve obligado a aprender patrones generales. En deep learning, el data augmentation es una forma inteligente de "crear" más datos transformando los existentes.
  • Regularización: L1 (Lasso), L2 (Ridge), Elastic Net — penalizan pesos grandes, forzando al modelo a ser más simple. En deep learning, además de L2 (weight decay), se usa Dropout, Batch Normalization y otras técnicas específicas que se cubren en el submódulo de Regularización.
  • Validación cruzada: estimación más robusta del rendimiento real, evitando conclusiones basadas en una única división afortunada de los datos.
  • Reducción de features: PCA, selección de features, eliminación de redundancia — reducir la dimensionalidad del problema limita la capacidad del modelo de memorizar.
  • Ensemble: Random Forest, Gradient Boosting → combinan múltiples modelos para reducir varianza. La diversidad entre modelos es clave para que funcione.
  • Early stopping: detener el entrenamiento cuando el error en validación empieza a subir, antes de que el modelo memorice. Es una técnica fundamental tanto en ML como en DL.

Resumen del módulo: El machine learning clásico proporciona la base conceptual para todo el deep learning. Los conceptos de función de pérdida, gradiente descendente, regularización, bias-variance, validación cruzada y feature engineering son universales. Dominar estos fundamentos te convierte en un mejor practicante de deep learning, no al revés. A lo largo de los demás módulos de esta web verás estos conceptos aplicados a redes neuronales, redes convolucionales, transformers y más.

Recursos adicionales y referencias

Para profundizar en los temas tratados en este módulo, estos recursos son excelentes puntos de partida:

Si tu interés es el deep learning pero necesitas unas bases de ML clásico, quédate con:

  1. Scikit-learn: la librería de referencia. Domina su API unificada (fit/predict/transform).
  2. Datos tabulares: practica con datasets de Kaggle (Titanic, House Prices, Credit Fraud). Los usarás también para practicar con redes neuronales.
  3. XGBoost / LightGBM: los modelos que más se usan en producción con datos tabulares.
  4. Feature engineering: aprende a crear features manualmente — es un arte que el DL automatiza pero no elimina.
  5. Explicabilidad: SHAP, LIME — cada vez más importantes en la industria.

Y para continuar con tu aprendizaje en esta web, te recomendamos explorar:

Recuerda: en la industria, la mayoría de problemas son con datos tabulares donde XGBoost/LightGBM sigue ganando. El deep learning brilla con datos no estructurados (imágenes, texto, audio). Un buen ML engineer o científico de datos domina ambos mundos.

🧪 Herramientas interactivas
🏭 Casos de uso