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.
Busca en todas las páginas de la documentación
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.
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:
"""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:
fit/predict para regresión y clasificación.| 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 | - |
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))])StandardScaler en un pipeline.max_depth=None memoriza ruido en datos pequeños. Solución: limitar la profundidad, aumentar min_samples_leaf, usar CV.predict_proba - algunos modelos necesitan probability=True (SVC) para salidas de probabilidad. Solución: verificar el soporte del estimador antes de usar proba.| 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 |
alpha más alto encoge los coeficientes hacia cero, reduciendo el sobreajuste.alpha=0 es mínimos cuadrados ordinarios.RidgeCV).RandomForest de sklearn no maneja NaN de forma nativa - imputar primero.joblib.dump el pipeline ajustado.pipe.predict(new_row) con los mismos nombres de columna.LogisticRegression(multi_class="multinomial", max_iter=1000)
# o
RandomForestClassifier() # maneja multiclase de forma nativaaverage="macro" cuando las clases están desequilibradas.for name, imp in zip(feature_names, reg.feature_importances_):
print(f"{name}: {imp:.3f}")feature_importances_.y de cadena directamente.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+.
Revisado por Chris St. John·Última actualización: 19 jul 2026