K-fold estratificado
Como acabas de ver, la distribución de la variable objetivo varía bastante entre los folds debido a las particiones aleatorias. No es crucial para esta competición en concreto, pero podría ser un problema en competiciones de clasificación con una variable objetivo muy desbalanceada.
Para solucionarlo, vamos a implementar la estrategia de K-fold estratificado, estratificando por la variable objetivo. El DataFrame train ya está disponible en tu espacio de trabajo.
Este ejercicio forma parte del curso
Cómo ganar una competición de Kaggle con Python
Instrucciones del ejercicio
- Crea un objeto
StratifiedKFoldcon 3 folds y barajado. - Itera sobre cada partición usando el objeto
str_kf. La estratificación se basa en la columna "interest_level". - En cada partición, selecciona los folds de entrenamiento y de prueba usando
train_indexytest_index.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Import StratifiedKFold
from sklearn.model_selection import StratifiedKFold
# Create a StratifiedKFold object
str_kf = ____(n_splits=____, shuffle=____, random_state=123)
# Loop through each split
fold = 0
for train_index, test_index in ____.____(train, train['interest_level']):
# Obtain training and testing folds
cv_train, cv_test = ____.iloc[____], ____.iloc[____]
print('Fold: {}'.format(fold))
print('CV train shape: {}'.format(cv_train.shape))
print('Medium interest listings in CV train: {}\n'.format(sum(cv_train.interest_level == 'medium')))
fold += 1