Cuando ajustamos modelos, nuestro objetivo es mejorar su rendimiento en datos no vistos. El ajuste de hiperparámetros puede mejorar el rendimiento en los conjuntos de prueba, pero si se hace incorrectamente, puede resultar en sobreajuste. Para evitar esto, utilizamos la validación cruzada.
Método K-Fold
Un método común de validación cruzada es K-Fold. Dividimos nuestros datos de entrenamiento en K pliegues o conjuntos más pequeños. Luego, entrenamos el modelo K veces, utilizando un pliegue diferente como conjunto de validación en cada iteración y los otros K-1 pliegues como conjunto de entrenamiento.
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import KFold, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=30) k_folds = KFold(n_splits=7) scores = cross_val_score(clf, X, y, cv=k_folds) print("Puntuaciones de Validación Cruzada: ", scores) print("Puntuación Promedio de Validación Cruzada: ", scores.mean()) print("Número de Puntuaciones de Validación Cruzada utilizadas en el Promedio: ", len(scores))
Método K-Fold Estratificado
Cuando tenemos clases desequilibradas en nuestros datos, es importante considerar esto durante la validación cruzada. El método K-Fold Estratificado asegura que cada pliegue tenga una proporción igual de todas las clases.
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import StratifiedKFold, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=25) stratified_k_folds = StratifiedKFold(n_splits=6) scores = cross_val_score(clf, X, y, cv=stratified_k_folds) print("Puntuaciones de Validación Cruzada: ", scores) print("Puntuación Promedio de Validación Cruzada: ", scores.mean()) print("Número de Puntuaciones de Validación Cruzada utilizadas en el Promedio: ", len(scores))
Método Leave-One-Out (LOO)
El método Leave-One-Out implica usar una sola observación como conjunto de validación y las demás como conjunto de entrenamiento, repitiendo esto para cada observación.
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import LeaveOneOut, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=18) loo = LeaveOneOut() scores = cross_val_score(clf, X, y, cv=loo) print("Puntuaciones de Validación Cruzada: ", scores) print("Puntuación Promedio de Validación Cruzada: ", scores.mean()) print("Número de Puntuaciones de Validación Cruzada utilizadas en el Promedio: ", len(scores))
Método Leave-P-Out (LPO)
El método Leave-P-Out es similar al Leave-One-Out, pero permite especificar cuántas observaciones dejar fuera para la validación.
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import LeavePOut, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=12) lpo = LeavePOut(p=2) scores = cross_val_score(clf, X, y, cv=lpo) print("Puntuaciones de Validación Cruzada: ", scores) print("Puntuación Promedio de Validación Cruzada: ", scores.mean()) print("Número de Puntuaciones de Validación Cruzada utilizadas en el Promedio: ", len(scores))
Método Shuffle Split
Shuffle Split divide los datos en conjuntos de entrenamiento y prueba de manera aleatoria, lo que es útil cuando no se necesita una división determinista.
from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import ShuffleSplit, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=8) ss = ShuffleSplit(train_size=0.7, test_size=0.2, n_splits=5) scores = cross_val_score(clf, X, y, cv=ss) print("Puntuaciones de Validación Cruzada: ", scores) print("Puntuación Promedio de Validación Cruzada: ", scores.mean()) print("Número de Puntuaciones de Validación Cruzada utilizadas en el Promedio: ", len(scores))
Estos son algunos de los métodos de validación cruzada que puedes aplicar en Python para evaluar tus modelos. La elección del método adecuado depende de la naturaleza de tus datos y tus objetivos de modelado. La validación cruzada es una técnica esencial para garantizar que tus modelos funcionen bien en datos no vistos.