2017-08-04 1 views
3

Mit sklearn möchte ich 3 Splits (d. H. N_splits = 3) im Beispiel-Dataset haben und ein Train/Test-Verhältnis von 70:30 haben. Ich bin in der Lage, den Satz in 3 Falten zu teilen, aber nicht in der Lage, die Testgröße zu definieren (ähnlich wie bei der train_test_split-Methode). Gibt es eine Möglichkeit, die Test-Stichprobengröße in StratifiedKFold zu definieren?Wie gibt man die Testgröße in geschichtetem kfold Sampling in Python?

from sklearn.model_selection import StratifiedKFold as SKF 
skf = SKF(n_splits=3) 
skf.get_n_splits(X, y) 
for train_index, test_index in skf.split(X, y): 
# Loops over 3 iterations to have Train test stratified split 
    X_train, X_test = X[train_index], X[test_index] 
    y_train, y_test = y[train_index], y[test_index] 

Antwort

2

StratifiedKFold funktioniert per Definition eine K-Fold-Teilung. Das heißt, der zurückgegebene Iterator liefert (K-1) Sätze für das Training, während 1 zum Testen gesetzt wird. K wird von n_splits gesteuert, und daher werden Gruppen von n_samples/K erstellt und alle Kombinationen von K-1 für Training/Tests verwendet. Siehe Wikipedia oder Google K-fold cross-validation für mehr Informationen darüber.

Kurz gesagt, ist die Größe des Prüfgerätes wird 1/K (das heißt 1/n_splits), so können Sie Melodie, die Parameter der Testgröße zu steuern (z n_splits=3 wird Test Aufteilung der Größe haben 1/3 = 33% Ihrer Daten). StratifiedKFold wird jedoch über K Gruppen von K-1 iterieren, und möglicherweise nicht was Sie wollen.

Nachdem das gesagt wurde, könnten Sie interessiert sein an StratifiedShuffleSplit, die nur konfigurierbare Anzahl von Aufteilungen und Zug/Test-Verhältnis zurückgibt. Wenn Sie nur einen Split möchten, können Sie n_splits=1 tunen und trotzdem test_size=0.3 behalten (oder welches Verhältnis auch immer Sie wollen).

Verwandte Themen