Aprendizaje Supervisado
El aprendizaje supervisado mapea características de entrada a etiquetas conocidas. La regresión predice valores continuos; la clasificación asigna categorías discretas. sklearn proporciona una API coherente entre algoritmos.
Receta
Tarjeta de referencia rápida - lista para copiar y pegar.
from sklearn.linear_model import Ridge, LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingRegressor
# Clasificación
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)
# Regresión
reg = Ridge(alpha=1.0)
reg.fit(X_train, y_train)Cuándo usar esto:
- Predicción de un resultado numérico (precio, demanda, latencia) - regresión.
- Asignación de categorías (abandono, fraude, sentimiento) - clasificación.
- Datos tabulares con ejemplos de entrenamiento etiquetados.
- Modelado de línea base antes de la optimización de deep learning o gradient boosting.
Ejemplo de Trabajo
"""supervised_learning.py - regresión y clasificación con sklearn."""
from __future__ import annotations
import pandas as pd
from sklearn.datasets import fetch_california_housing, load_breast_cancer
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
from sklearn.linear_model import LogisticRegression, Ridge
from sklearn.metrics import mean_absolute_error, roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
# --- Clasificación ---
cancer = load_breast_cancer(as_frame=True)
Xc, yc = cancer.data, cancer.target
Xc_train, Xc_test, yc_train, yc_test = train_test_split(Xc, yc, test_size=0.2, random_state=42)
clf_pipe = Pipeline([
("scale", StandardScaler()),
("clf", LogisticRegression(max_iter=1000, random_state=42)),
])
clf_pipe.fit(Xc_train, yc_train)
proba = clf_pipe.predict_proba(Xc_test)[:, 1]
print("AUC de clasificación:", roc_auc_score(yc_test, proba))
# --- Regresión ---
housing = fetch_california_housing(as_frame=True)
Xr, yr = housing.data, housing.target
Xr_train, Xr_test, yr_train, yr_test = train_test_split(Xr, yr, test_size=0.2, random_state=42)
reg = RandomForestRegressor(n_estimators=200, random_state=42, n_jobs=-1)
reg.fit(Xr_train, yr_train)
print("MAE de regresión:", mean_absolute_error(yr_test, reg.predict(Xr_test)))Lo que esto demuestra:
- Misma API
fit/predictpara regresión y clasificación. - Escalado antes de la regresión logística; los modelos de árbol omiten el escalado.
- Salidas de probabilidad para métricas de clasificación de ranking.
- MAE como métrica de regresión interpretable (dólares, unidades).
Inmersión Profunda
Cómo Funciona
- Entrenamiento minimiza una función de pérdida sobre ejemplos etiquetados (pérdida logarítmica, MSE, pérdida de bisagra).
- Los modelos lineales aprenden sumas ponderadas de características; rápidos e interpretables.
- Los conjuntos de árboles particionan el espacio de características con divisiones alineadas con los ejes; capturan interacciones no lineales.
- La regularización (L1/L2) penaliza los pesos grandes para reducir el sobreajuste.
- La complejidad del límite de decisión crece con la capacidad del modelo: equilibra con métricas de validación.
Selección de Algoritmos
| Problema | Empieza Con | Mejora a |
|---|---|---|
| Clasificación binaria | LogisticRegression | RandomForest, XGBoost |
| Multiclase | LogisticRegression (multinomial) | RandomForestClassifier |
| Regresión (lineal-ish) | Ridge | GradientBoostingRegressor |
| Regresión (no lineal) | RandomForestRegressor | LightGBM |
| Datos pequeños, interpretabilidad | Modelos lineales | - |
| Datos tabulares grandes, precisión | Gradient boosting | - |
Notas de Python
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
# SVM: potente con características escaladas, más lento en datos grandes
svm = Pipeline([("scale", StandardScaler()), ("clf", SVC(probability=True))])
# k-NN: aprendiz perezoso, sensible a la escala y dimensionalidad
knn = Pipeline([("scale", StandardScaler()), ("clf", KNeighborsClassifier(n_neighbors=5))])Trampas
- Usar métricas de clasificación para regresión - la precisión en objetivos continuos no tiene sentido. Solución: MAE, RMSE, R-cuadrado para regresión.
- No escalar para SVM/k-NN/regresión logística - los métodos de distancia y gradiente fallan en características no escaladas. Solución:
StandardScaleren un pipeline. - Ignorar el desequilibrio de clases - la precisión parece buena mientras el modelo predice la clase mayoritaria. Solución: F1, ROC-AUC o remuestreo.
- Sobreajuste con árboles profundos -
max_depth=Nonememoriza ruido en datos pequeños. Solución: limitar la profundidad, aumentarmin_samples_leaf, usar CV. - Multicolinealidad en regresión lineal - coeficientes inestables con características correlacionadas. Solución: regresión Ridge o selección de características.
- Predecir sin
predict_proba- algunos modelos necesitanprobability=True(SVC) para salidas de probabilidad. Solución: verificar el soporte del estimador antes de usar proba.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Modelos lineales | Interpretabilidad, línea base rápida | Interacciones no lineales complejas dominan |
| Random Forest | Predeterminado robusto, poca optimización | Necesita máxima precisión en datos tabulares grandes |
| Gradient boosting | Mejor precisión tabular | Necesita iteración de entrenamiento rápida o interpretabilidad |
| Deep learning | Imágenes, texto, secuencias | Datos tabulares pequeños con <10k filas |
Preguntas Frecuentes
¿Cuál es la diferencia entre regresión y clasificación?
- La regresión produce valores continuos (precio = 249.99).
- La clasificación produce etiquetas discretas (spam = sí/no).
- La clasificación multiclase tiene 3+ categorías.
¿Cuándo debería usar regresión logística?
- Sólida línea base lineal para clasificación.
- Coeficientes interpretables para revisión de partes interesadas.
- Entrenamiento rápido en características de texto dispersas de alta dimensión.
¿Qué hace el parámetro alpha de regularización en Ridge?
- Un
alphamás alto encoge los coeficientes hacia cero, reduciendo el sobreajuste. alpha=0es mínimos cuadrados ordinarios.- Optimizar con validación cruzada (
RidgeCV).
¿Cómo manejan los modelos de árbol los valores faltantes?
RandomForestde sklearn no maneja NaN de forma nativa - imputar primero.- XGBoost y LightGBM aprenden direcciones óptimas para valores faltantes.
- Imputar dentro de un pipeline para árboles de sklearn.
¿Qué es la compensación sesgo-varianza?
- Los modelos simples subajustan (alto sesgo); los modelos complejos sobreajustan (alta varianza).
- Las métricas de validación revelan el punto óptimo.
- La regularización y los ensambles reducen la varianza.
¿Puedo usar el mismo pipeline para entrenamiento y producción?
- Sí -
joblib.dumpel pipeline ajustado. - Producción llama a
pipe.predict(new_row)con los mismos nombres de columna.
¿Cómo manejo la clasificación multiclase?
LogisticRegression(multi_class="multinomial", max_iter=1000)
# o
RandomForestClassifier() # maneja multiclase de forma nativa- Usar F1 con
average="macro"cuando las clases están desequilibradas.
¿Cuál es un buen primer modelo para un nuevo conjunto de datos?
- Regresión logística o Ridge para líneas base.
- RandomForest para una verificación no lineal sin optimización intensiva.
- Comparar ambos antes de invertir en gradient boosting.
¿Cómo interpreto la importancia de las características?
for name, imp in zip(feature_names, reg.feature_importances_):
print(f"{name}: {imp:.3f}")- Los modelos de árbol exponen
feature_importances_. - Los modelos lineales usan la magnitud de los coeficientes (después del escalado).
¿Siempre debo usar métodos de ensamblaje?
- Los ensambles ganan en datos tabulares tipo Kaggle.
- Los modelos lineales ganan cuando la interpretabilidad y la velocidad son importantes.
- Empieza simple, mejora cuando la validación justifique la complejidad.
¿Cómo maneja sklearn las etiquetas de cadena?
- La mayoría de los clasificadores aceptan etiquetas
yde cadena directamente. - Codificadas internamente; las predicciones devuelven el tipo de etiqueta original.
¿Cuándo necesito características polinómicas?
- Cuando los modelos lineales subajustan pero las relaciones son suaves.
- Aumenta el recuento de características rápidamente - emparejar con regularización.
- Los modelos de árbol generalmente hacen que los polinomios sean innecesarios.
Relacionados
- Evaluación de Modelos - elegir las métricas correctas
- Ingeniería de Características - preprocesamiento por algoritmo
- Gradient Boosting - XGBoost y LightGBM
- Optimización de Hiperparámetros - optimizar parámetros del modelo
- Datos Desequilibrados - peso de clase y remuestreo
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.