0Pricing
Learn AI with Python · Lección

Estrategias de validación cruzada

k-fold, k-fold estratificado, leave-one-out y división de series temporales: cuándo usar cada método.

Estrategias de validación cruzada es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.

Por qué usar validación cruzada

Una única división entre entrenamiento y prueba puede ser afortunada o desafortunada. La validación cruzada repite la evaluación con distintas divisiones y promedia las puntuaciones, lo que proporciona una estimación más fiable del rendimiento.

Validación cruzada K-Fold

KFold divide los datos en K partes iguales. Cada pliegue se utiliza una vez como conjunto de prueba, mientras que el resto se usa para entrenar el modelo. Se obtienen K puntuaciones para promediarlas.

from sklearn.model_selection import KFold

kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
    Xtr, Xte = X[train_idx], X[test_idx]
    ytr, yte = y[train_idx], y[test_idx]
    # train and evaluate here

K-Fold estratificado para clasificación

En clasificación, un K-Fold normal puede producir pliegues con proporciones de clase desequilibradas. StratifiedKFold conserva las proporciones de clase en cada pliegue.

from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
    # each fold keeps the same class balance as the full set
    pass

Atajo con cross_val_score

cross_val_score ejecuta todo el ciclo por usted y devuelve una matriz con las puntuaciones de cada pliegue. Utiliza automáticamente StratifiedKFold para los clasificadores.

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())

Elección del número de pliegues

Un mayor número de pliegues (por ejemplo, 10) proporciona una estimación menos sesgada, pero requiere más cálculo. La validación de 5 pliegues es un equilibrio habitual. Para conjuntos de datos muy pequeños, leave-one-out utiliza N pliegues, donde cada conjunto de prueba contiene una muestra.

from sklearn.model_selection import LeaveOneOut, cross_val_score

loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())

TimeSeriesSplit para datos temporales

En las series temporales nunca se debe entrenar con datos del futuro. TimeSeriesSplit siempre utiliza datos pasados para entrenar y el bloque siguiente para probar, ampliando la ventana de entrenamiento entre los pliegues.

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    # train_idx always precedes test_idx in time
    print(len(train_idx), len(test_idx))

Por qué importa el orden en las series temporales

Barajar datos ordenados temporalmente filtra información del futuro al entrenamiento e infla las puntuaciones. TimeSeriesSplit respeta el orden cronológico, por lo que la evaluación refleja las condiciones reales de predicción.

cross_validate para varias métricas

cross_validate funciona como cross_val_score, pero devuelve varias métricas a la vez y puede incluir las puntuaciones de entrenamiento y los tiempos de ajuste.

from sklearn.model_selection import cross_validate

results = cross_validate(
    clf, X, y, cv=5,
    scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
    return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])

Interpretación de la salida de cross_validate

El resultado es un diccionario con claves como test_<metric>, train_<metric>, fit_time y score_time. Comparar las puntuaciones de entrenamiento y de prueba ayuda a detectar el sobreajuste.

import numpy as np

gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))

Validación cruzada y fuga de datos

Ajuste siempre el preprocesamiento (escalado y codificación) dentro del ciclo de validación cruzada, no antes. Utilice una Pipeline para que cada pliegue escale usando únicamente sus datos de entrenamiento y evitar así la fuga de datos.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)

Elección de la estrategia adecuada

Utilice StratifiedKFold para clasificación, KFold normal para regresión y TimeSeriesSplit para datos temporales. Incluya el preprocesamiento en una canalización e informe de la media y la desviación estándar entre los pliegues.

Comprobación rápida

Ponga a prueba sus conocimientos sobre validación cruzada.

Resumen

Resumen: La validación cruzada promedia el rendimiento de varias divisiones. Utilice KFold para regresión, StratifiedKFold para clasificación equilibrada y TimeSeriesSplit para datos temporales. cross_val_score proporciona una métrica; cross_validate proporciona varias, además de los tiempos. Realice siempre el preprocesamiento dentro de una Pipeline para evitar la fuga de datos.

Preguntas frecuentes

¿La lección «Estrategias de validación cruzada» es gratis?

Sí — el texto completo de «Estrategias de validación cruzada» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.

¿Qué aprenderé en «Estrategias de validación cruzada»?

k-fold, k-fold estratificado, leave-one-out y división de series temporales: cuándo usar cada método. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn AI with Python?

No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Estrategias de validación cruzada»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?

Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Estrategias de validación cruzada
  2. Análisis profundo de métricas de clasificación
  3. Búsqueda en rejilla y búsqueda aleatoria
  4. Optimización bayesiana con Optuna
← Volver a Learn AI with Python