K-fold stratificato
Come hai appena notato, a causa delle suddivisioni casuali ottieni una distribuzione della variabile target piuttosto diversa tra i fold. Non è cruciale per questa competizione, ma potrebbe essere un problema nelle competizioni di classificazione con target fortemente sbilanciato.
Per superare questo problema, implementiamo la strategia K-fold stratificata con stratificazione sulla variabile target. Il DataFrame train è già disponibile nel tuo workspace.
Questo esercizio fa parte del corso
Vincere una competizione Kaggle con Python
Istruzioni dell'esercizio
- Crea un oggetto
StratifiedKFoldcon 3 fold e con shuffling. - Itera su ciascuna suddivisione usando l’oggetto
str_kf. La stratificazione si basa sulla colonna "interest_level". - Per ogni split seleziona i fold di training e di testing usando
train_indexetest_index.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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