9 · Regresión logística: sigmoide + log-loss
El clasificador más simple: pasa un modelo lineal por una sigmoide para obtener probabilidades calibradas y entrena con entropía cruzada binaria.
Regresión logística = regresión lineal pasada por una sigmoide — una salida de probabilidad suave entrenada con entropía cruzada binaria.
Sin esto:
Sin ella, no puedes hacer clasificación en absoluto en la familia de modelos lineales.
La regresión lineal predice un número en la recta real — útil para precios de casas y temperaturas, pero incorrecta para clasificación. Si naïvemente usas un modelo lineal para predecir "spam vs no-spam", dos cosas fallan:
- Las predicciones salen de [0, 1]. La salida cruda wᵀx + b puede ser −∞ o +∞, así que no puede interpretarse como probabilidad.
- El error cuadrático es el objetivo incorrecto. Para resultados binarios (0 o 1), el objetivo natural es la verosimilitud de Bernoulli — no mínimos cuadrados.
La regresión logística resuelve ambos problemas.
El ingrediente clave es la función sigmoide σ(z):
σ(z) = 1 / (1 + e^(−z))
Comprime cualquier número real z al intervalo abierto (0, 1). El modelo se convierte en:
P(y=1 | x) = σ(wᵀx + b)
Ahora la salida es una probabilidad legítima. En z = 0, σ(0) = 0.5 — incertidumbre perfecta. Cuando z → +∞, σ → 1 (predicción positiva fuerte). Cuando z → −∞, σ → 0 (predicción negativa fuerte).
El objetivo log-loss (Entropía Cruzada Binaria)
Dados n muestras de entrenamiento con objetivos yᵢ ∈ {0, 1} y probabilidades predichas p̂ᵢ, la pérdida es:
L = −(1/n) · Σ [yᵢ log p̂ᵢ + (1 − yᵢ) log(1 − p̂ᵢ)]
Esto se deriva directamente del logaritmo negativo de la verosimilitud de una distribución de Bernoulli (ver track de Estadística ch7 sobre MLE). Cada muestra contribuye log p̂ᵢ (si la etiqueta verdadera es 1) o log(1 − p̂ᵢ) (si la etiqueta verdadera es 0).
Ajuste mediante descenso de gradiente
A diferencia de la regresión lineal, no existe solución en forma cerrada para la regresión logística porque la sigmoide introduce una no-linealidad. En cambio, el modelo se entrena mediante descenso de gradiente sobre el log-loss. El gradiente de la pérdida con respecto a los pesos tiene la forma elegante:
∂L/∂w = (1/n) · Xᵀ (p̂ − y)
donde p̂ es el vector de probabilidades predichas e y es el vector de etiquetas verdaderas.
La frontera de decisión
El modelo predice la clase 1 cuando P(y=1 | x) > 0.5, es decir, cuando σ(wᵀx + b) > 0.5, es decir, cuando wᵀx + b > 0. La frontera entre las dos clases es el hiperplano:
wᵀx + b = 0
En 2 variables, es una línea. En 3D, un plano. En dimensiones mayores, un hiperplano. La frontera de decisión siempre es lineal en el espacio de variables original — para obtener fronteras curvas necesitarías variables polinómicas o un modelo diferente.
Python (in browser)
La sigmoide mapea toda la recta real en (0, 1). Cualquier wᵀx + b, por extremo que sea, se convierte en una probabilidad válida. La forma de S significa que la función es más sensible cerca de cero — lejos de la frontera de decisión es confiada y saturada.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`model.coef_` es el vector de pesos w; `model.intercept_` es el sesgo b. `predict_proba` retorna la distribución de probabilidades completa sobre las clases — la segunda columna es P(y=1|x). Las dos columnas siempre suman exactamente 1.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El gradiente de rojo a verde muestra la confianza del modelo. La línea blanca (prob=0.5) es la frontera de decisión lineal — los puntos a la derecha se predicen como clase 1, los de la izquierda como clase 0. Lejos de la frontera, la sigmoide se satura y la confianza es alta.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El clip de épsilon (`np.clip(p, 1e-12, 1-1e-12)`) previene log(0) que daría -inf y bloquearía el entrenamiento. sklearn hace esto internamente. Nota cómo una predicción equivocada y confiada (y=1 pero p_hat=0.1) contribuye una pérdida enorme — penalizando los errores sobreconfiados.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Esta derivación conecta directamente con el track de Estadística (ch7, MLE de Bernoulli). Si has trabajado ese capítulo, es el mismo argumento de máxima verosimilitud — aplicado a clasificación en lugar de lanzamientos de moneda.
Si una regresión logística devuelve `predict_proba([[1, 2]])` igual a `[[0.2, 0.8]]`, el modelo está:
- P(y=1|x) = σ(wᵀx + b) donde σ comprime la puntuación lineal a una probabilidad en (0, 1).
- El entrenamiento minimiza la entropía cruzada binaria (log-loss), derivada de MLE de Bernoulli — no hay forma cerrada, se requiere descenso de gradiente.
- La frontera de decisión es el hiperplano wᵀx + b = 0 — siempre lineal en el espacio de variables original.
- Con datos desbalanceados, usa `class_weight='balanced'` — de lo contrario el modelo aprende a predecir la clase mayoritaria.
Clasificador binario predeterminado en los pipelines de scikit-learn; la capa de salida de la mayoría de las redes neuronales de clasificación binaria ES una regresión logística sobre las variables aprendidas; los A/B tests para análisis de conversión lo usan como modelo estándar.
Si lo quitas: Tendrías que usar SVMs o árboles desde el principio — sin una línea base probabilística suave.