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
Gagner une compétition Kaggle en Python
Instructions
- 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 cet exemple de code.
# 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