11 · Clasificación multiclase: OVR + softmax
Ve más allá del binario: One-vs-Rest entrena K clasificadores binarios; softmax entrena un modelo que emite K probabilidades calibradas que suman 1.
Dos estrategias para ir más allá del binario: entrenar un clasificador binario por clase (One-vs-Rest), o emitir una probabilidad normalizada por clase (softmax).
Sin esto:
Sin soporte multiclase, no podrías hacer clasificación de dígitos, identificación de idiomas ni ningún problema de K clases.
La regresión logística binaria maneja exactamente dos clases. Los problemas reales suelen tener K > 2 clases — dígitos escritos a mano (0-9), identificación de especies (cientos de clases), identificación de idiomas (docenas de idiomas). Dos estrategias extienden la regresión logística a K clases:
OVR — One-vs-Rest (también llamado One-vs-All)
Entrena K clasificadores binarios separados. El clasificador k pregunta "¿es esta muestra la clase k, o algo diferente?" En predicción, ejecuta los K clasificadores y elige la clase con la mayor probabilidad predicha.
Ventajas: simple; cada submodelo puede entrenarse de forma independiente (paralelizable). Desventajas: cada subclasificador ve un dataset desbalanceado (1 clase positiva vs K-1 negativas); K modelos que almacenar y mantener.
OVO — One-vs-One
Entrena K(K-1)/2 clasificadores binarios — uno por cada par de clases. En tiempo de prueba, cada clasificador vota y gana la clase con más votos.
Ventajas: cada modelo se entrena en un problema balanceado de 2 clases. Desventajas: K(K-1)/2 modelos — costoso para K grande (p. ej., K=100 → 4950 modelos). Menos común en la práctica.
Softmax (Regresión Logística Multinomial)
Un único modelo que emite directamente K probabilidades calibradas que suman 1. El modelo aprende K vectores de pesos (uno por clase) y aplica la transformación softmax:
softmax(z)ₖ = e^zₖ / Σⱼ e^zⱼ
donde zₖ = wₖᵀx + bₖ es la puntuación bruta (logit) para la clase k. La salida es una distribución de probabilidades válida: todos los valores en (0,1), todos suman 1.
La pérdida es la entropía cruzada categórica — la generalización natural de BCE a K clases:
L = −(1/n) · Σᵢ Σₖ yᵢₖ · log(p̂ᵢₖ)
donde yᵢₖ = 1 si la muestra i es la clase k (codificación one-hot), si no 0.
En sklearn, LogisticRegression(multi_class="multinomial", solver="lbfgs") usa softmax y entropía cruzada categórica. Desde sklearn 0.22+, multinomial es el predeterminado cuando el solver lo soporta.
Python (in browser)
Cada fila de `predict_proba` suma exactamente 1.0 — softmax garantiza una distribución de probabilidades válida entre clases. La clase predicha siempre es la columna con la mayor probabilidad.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Con clases bien separadas como Iris, OVR y multinomial dan una accuracy similar. En problemas más difíciles con clases superpuestas, softmax suele ganar porque optimiza una única pérdida conjunta sobre todas las clases simultáneamente en lugar de K pérdidas independientes.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El truco `z - z.max()` (restar el logit máximo antes de exponenciar) mantiene todos los valores en exp() no positivos, previniendo el desbordamiento de punto flotante. El resultado es matemáticamente idéntico porque el máximo se cancela en la fracción — pero numéricamente mucho más seguro.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
La regla es simple: clases mutuamente excluyentes → softmax; clases superpuestas/multi-etiqueta → OVR (o un modelo multi-etiqueta dedicado).
Para un problema de 4 clases, softmax emite (0.1, 0.4, 0.3, 0.2). ¿Qué clase predice el modelo?
- OVR entrena K clasificadores binarios y elige el argmax en predicción — simple y paralelizable.
- Softmax produce una distribución de probabilidades válida sobre K clases a partir de K vectores de pesos; cada fila suma 1.
- Siempre resta z.max() antes de calcular softmax para evitar el desbordamiento de exp().
- Softmax + entropía cruzada categórica es la capa de salida universal para redes neuronales multiclase.
Clasificación de imágenes (ImageNet con 1000 clases usa softmax); predicción de tokens en modelos de lenguaje (vocabulario de 50k+ tokens via softmax); clasificación de intenciones en NLU.
Si lo quitas: Quedarías atrapado con clasificadores binarios y parches inelegantes cuando necesitas salida de K clases.