K-fold stratifié
Comme vous venez de le constater, la distribution de la variable cible varie passablement d'un pli à l'autre à cause des séparations aléatoires. Ce n'est pas crucial pour cette compétition en particulier, mais cela peut poser problème dans les compétitions de classification avec une variable cible très déséquilibrée.
Pour y remédier, mettons en place une stratégie de K-fold stratifié en stratifiant selon la variable cible. Le DataFrame train est déjà disponible dans votre espace de travail.
Cette activité fait partie du cours
Remporter une compétition Kaggle en Python
Instructions de l’exercice
- Créez un objet
StratifiedKFoldavec 3 plis et activation du brassage (shuffling). - Parcourez chaque séparation à l'aide de l'objet
str_kf. La stratification se fait sur la colonne "interest_level". - Pour chaque séparation, sélectionnez les plis d'entraînement et de test en utilisant
train_indexettest_index.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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