Sortir des exemples de KFold, StratifiedKFold, StratifiedShuffleSplit :
La sortie illustrée ci-dessus est une extension de @Ken Syme
Le code de l'entreprise :
from sklearn.model_selection import KFold, StratifiedKFold, StratifiedShuffleSplit
SEED = 43
SPLIT = 3
X_train = [0,1,2,3,4,5,6,7,8]
y_train = [0,0,0,0,0,0,1,1,1] # note 6,7,8 are labelled class '1'
print("KFold, shuffle=False (default)")
kf = KFold(n_splits=SPLIT, random_state=SEED)
for train_index, test_index in kf.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
print("KFold, shuffle=True")
kf = KFold(n_splits=SPLIT, shuffle=True, random_state=SEED)
for train_index, test_index in kf.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
print("\nStratifiedKFold, shuffle=False (default)")
skf = StratifiedKFold(n_splits=SPLIT, random_state=SEED)
for train_index, test_index in skf.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
print("StratifiedKFold, shuffle=True")
skf = StratifiedKFold(n_splits=SPLIT, shuffle=True, random_state=SEED)
for train_index, test_index in skf.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
print("\nStratifiedShuffleSplit")
sss = StratifiedShuffleSplit(n_splits=SPLIT, random_state=SEED, test_size=3)
for train_index, test_index in sss.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
print("\nStratifiedShuffleSplit (can customise test_size)")
sss = StratifiedShuffleSplit(n_splits=SPLIT, random_state=SEED, test_size=2)
for train_index, test_index in sss.split(X_train, y_train):
print("TRAIN:", train_index, "TEST:", test_index)
5 votes
L'un est un itérateur k-fold, qui divise les données k fois, et l'autre ne les divise qu'une seule fois.
2 votes
Mmm dans StratifiedShuffleSplit vous pouvez définir le nombre de splits... à partir de la page web de sklearn : StratifiedShuffleSplit : Cet objet de validation croisée est une fusion de StratifiedKFold et ShuffleSplit, qui renvoie des plis aléatoires stratifiés. Les plis sont faits en préservant le pourcentage d'échantillons pour chaque classe.
0 votes
Aah oui, ma faute. Mais il est quand même écrit dans la documentation de StratifiedShuffleSplit que vous avez liée que "Cet objet de validation croisée est une fusion de StratifiedKFold et ShuffleSplit, qui renvoie des plis aléatoires stratifiés. Les plis sont réalisés en préservant le pourcentage d'échantillons pour chaque classe."
4 votes
La différence est entre les plis (les données ne se chevauchent pas dans les plis). Alors que dans StratifiedShuffleSplit, elles peuvent et vont se chevaucher. Voir les exemples donnés dans les pages de documentation pour mieux comprendre. Spécifiquement les données de test. Dans StratifiedKFold, elles seront toujours différentes dans chaque pli. Et dans StratifiedShuffleSplit, il peut être répétitif.
0 votes
Donc, si je dois choisir entre les deux, je devrais opter pour StratifiedKFold, n'est-ce pas ? Je ne vois pas l'avantage d'utiliser le StratifiedShiffleSplit... mais il devrait y en avoir un car c'est une fonction plus récente de Sklearn... c'est ce que je me demande.
1 votes
On dirait que
StratifiedKFold
échantillons sans remplacement tandis queStratifiedShiffleSplit
avec lequel il se déplace. Donc, un avantage deStratifiedShiffleSplit
est que vous pouvez échantillonner autant de fois que vous le souhaitez. Bien sûr, les échantillons individuels se chevaucheront - de sorte que tout modèle ajusté sur les échantillons sera corrélé - mais vous pouvez ajuster beaucoup plus de modèles, et avec plus de données par modèle.0 votes
Pensons-y de cette façon.
StratifiedKFold
est la vraie validation croisée. Cependant,StratifiedShiffleSplit
est un "générateur", et il génère de manière aléatoire différentes répartitions "formation-test" pour les éléments suivantsn_splits
temps.