TL; DR: utilisez StratifiedShuffleSplit avectest_size=0.25
Scikit-learn fournit deux modules pour le fractionnement stratifié:
- StratifiedKFold : Ce module est utile en tant qu'opérateur de validation croisée directe de K-Fold: car il mettra en place des ensembles de
n_folds
formation / test de sorte que les classes soient également équilibrées dans les deux.
Voici du code (directement à partir de la documentation ci-dessus)
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2)
>>> len(skf)
2
>>> for train_index, test_index in skf:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
...
- StratifiedShuffleSplit : ce module crée un seul ensemble d'entraînement / de test ayant des classes (stratifiées) également équilibrées. C'est essentiellement ce que vous voulez avec le
n_iter=1
. Vous pouvez mentionner la taille du test ici comme danstrain_test_split
Code:
>>> sss = StratifiedShuffleSplit(y, n_iter=1, test_size=0.5, random_state=0)
>>> len(sss)
1
>>> for train_index, test_index in sss:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
>>>