TL; DR: usa StratifiedShuffleSplit contest_size=0.25
Scikit-learn fornisce due moduli per la suddivisione stratificata:
- StratifiedKFold : questo modulo è utile come operatore di convalida incrociata k-fold diretta: poiché configurerà set di
n_folds
addestramento / test in modo tale che le classi siano ugualmente bilanciate in entrambi.
Ecco del codice (direttamente dalla documentazione sopra)
>>> 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 : questo modulo crea un singolo set di addestramento / test con classi ugualmente bilanciate (stratificate). Essenzialmente questo è ciò che vuoi con il
n_iter=1
. Puoi menzionare la dimensione del test qui come intrain_test_split
Codice:
>>> 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]
>>>