TL; DR: Verwenden Sie StratifiedShuffleSplit mittest_size=0.25
Scikit-learn bietet zwei Module für Stratified Splitting:
- StratifiedKFold : Dieses Modul ist nützlich als direkter k-facher Kreuzvalidierungsoperator: Wie darin werden
n_folds
Trainings- / Testsätze so eingerichtet, dass die Klassen in beiden gleichermaßen ausgeglichen sind.
Hier ist ein Code (direkt aus der obigen Dokumentation)
>>> 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 : Dieses Modul erstellt ein einzelnes Trainings- / Test-Set mit gleichermaßen ausgeglichenen (geschichteten) Klassen. Im Wesentlichen ist es das, was Sie mit dem wollen
n_iter=1
. Sie können die Testgröße hier wie in erwähnentrain_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]
>>>