K-fold stratifié
Comme vous venez de le constater, la distribution de la variable cible varie fortement 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 pour des compétitions de classification avec une cible très déséquilibrée.
Pour y remédier, mettons en place une stratégie de K-fold stratifié en se basant sur la variable cible. Le DataFrame train est déjà disponible dans votre espace de travail.
Cet exercice fait partie du cours
<cours>Gagner une compétition Kaggle en Python</cours>Instructions de l’exercice
- Créez un objet
StratifiedKFoldavec 3 plis et un mélange aléatoire (shuffling). - Itérez sur 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