Comment pourrais-je scinder au hasard une matrice de données et le vecteur d'étiquette correspondant en un X_train, X_test, X_val, y_train, y_test, y_val avec Sklearn? Autant que je sache, sklearn.cross_validation.train_test_split
n'est capable que de se scinder en deux, pas en trois ...
machine-learning
scikit-learn
Hendrik
la source
la source
train_test_split
, vous faites cela par rapport au précédent partage 80/20. Donc, votre val est de 20% à 80%. Les proportions divisées ne sont pas très simples de cette façon.Il y a une excellente réponse à cette question sur SO qui utilise numpy et pandas.
La commande (voir la réponse à la discussion):
produit une répartition de 60%, 20% et 20% pour les ensembles de formation, de validation et de test.
la source
.6
signification de 60% ... mais qu'est-ce que cela.8
signifie?np.split
divisera à 60% de la longueur du tableau mélangé, puis à 80% de la longueur (ce qui représente 20% supplémentaires des données), laissant ainsi 20% restants des données. Cela est dû à la définition de la fonction. Vous pouvez tester / jouer avecx = np.arange(10.0)
np.split(x, [ int(len(x)*0.6), int(len(x)*0.8)])
La plupart du temps, vous ne vous séparerez pas une fois, mais dans un premier temps, vous diviserez vos données dans un ensemble de formation et de test. Par la suite, vous effectuerez une recherche de paramètres intégrant des découpages plus complexes, tels que la validation croisée avec un algorithme 'split k-fold' ou 'leave-one-out (LOO)'.
la source
Vous pouvez utiliser
train_test_split
deux fois. Je pense que c'est très simple.De cette façon,
train
,val
,test
ensemble sera de 60%, 20%, 20% de l'ensemble de données respectivement.la source
La meilleure réponse ci-dessus ne mentionne pas qu'en séparant deux fois en utilisant une
train_test_split
taille de partition ne changeant pas, on ne donnera pas la partition initialement prévue:Ensuite, la partie des ensembles de validation et de test dans la modification x_remain peut être comptée comme
A cette occasion, toutes les partitions initiales sont enregistrées.
la source
Voici une autre approche (en supposant une séparation égale à trois):
Cela peut être plus concis, mais je l’ai gardé prolixe à des fins d’explication.
la source
Étant donné que
train_frac=0.8
cette fonction crée un partage de 80% / 10% / 10%:la source
Ajoutant à la réponse de @ hh32 , tout en respectant les proportions prédéfinies telles que (75, 15, 10):
la source
Extension de la réponse de @ hh32 avec des ratios préservés.
Étant donné que le jeu de données restant est réduit après la première scission, de nouveaux ratios par rapport au jeu de données réduit doivent être calculés en résolvant l'équation suivante:
la source