Wie könnte ich mit Sklearn eine Datenmatrix und den entsprechenden Beschriftungsvektor zufällig in einen X_train, X_test, X_val, y_train, y_test, y_val aufteilen? Soweit ich weiß, sklearn.cross_validation.train_test_split
ist nur in der Lage, in zwei, nicht in drei zu spalten ...
machine-learning
scikit-learn
Hendrik
quelle
quelle
train_test_split
Fall machen Sie dies über den vorherigen 80/20 Split. Ihr Wert beträgt also 20% von 80%. Die aufgeteilten Proportionen sind auf diese Weise nicht sehr einfach.Es gibt eine großartige Antwort auf diese Frage auf SO , die Numpy und Pandas verwendet.
Der Befehl (siehe die Antwort für die Diskussion):
Erzeugt eine Aufteilung von 60%, 20%, 20% für Schulungs-, Validierungs- und Testsätze.
quelle
.6
Bedeutung von 60% sehen ... aber was bedeutet das.8
?np.split
teilt sich auf 60% der Länge des gemischten Arrays auf, dann auf 80% der Länge (das sind zusätzliche 20% der Daten), sodass 20% der Daten übrig bleiben. Dies liegt an der Definition der Funktion. Sie können testen / spielen mitx = np.arange(10.0)
np.split(x, [ int(len(x)*0.6), int(len(x)*0.8)])
In den meisten Fällen teilen Sie Ihre Daten nicht einmal auf, sondern in einem ersten Schritt in einem Trainings- und Testset. Anschließend führen Sie eine Parametersuche durch, die komplexere Aufteilungen wie die Kreuzvalidierung mit einem "Split-K-Fold" - oder "Leave-One-Out (LOO)" -Algorithmus enthält.
quelle
Sie können
train_test_split
zweimal verwenden. Ich denke, das ist sehr einfach.Auf diese Weise wird
train
,val
,test
wird Set 60%, 20%, 20% des Datensatzes sind.quelle
Die beste obige Antwort erwähnt nicht, dass durch zweimaliges Trennen
train_test_split
ohne Änderung der Partitionsgrößen die ursprünglich vorgesehene Partition nicht erhalten wird:Dann ändert sich der Teil der Validierungs- und Testmengen in x_remain und kann als gezählt werden
In diesem Fall werden alle anfänglichen Partitionen gespeichert.
quelle
Hier ist ein anderer Ansatz (unter der Annahme einer gleichmäßigen Dreifachaufteilung):
Dies kann präziser formuliert werden, ich habe es jedoch zu Erklärungszwecken ausführlich gehalten.
quelle
Vorausgesetzt
train_frac=0.8
, diese Funktion erzeugt eine Aufteilung von 80% / 10% / 10%:quelle
Hinzufügen zu @ hh32s Antwort unter Berücksichtigung vordefinierter Proportionen wie (75, 15, 10):
quelle
Erweiterung der Antwort von @ hh32 mit beibehaltenen Verhältnissen.
Da der verbleibende Datensatz nach der ersten Aufteilung reduziert wird, müssen neue Verhältnisse in Bezug auf den reduzierten Datensatz berechnet werden, indem die folgende Gleichung gelöst wird:
quelle