Comment diviser une partition/un jeu de données dans la formation et l'essai des ensembles de données pour, par exemple, de la croix de validation?
Ce qui est une bonne façon de fractionner un tableau NumPy au hasard dans la formation et les tests/validation dataset? Quelque chose de semblable à la cvpartition
ou crossvalind
fonctions Matlab.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez diviser l'ensemble de données une fois en deux moitiés, vous pouvez utiliser
numpy.random.shuffle
, ounumpy.random.permutation
si vous avez besoin de garder une trace des indices:ou
Il existe de nombreuses façons de à plusieurs reprises partition le même ensemble de données pour la validation croisée. Une stratégie consiste à rééchantillonner à partir de l'ensemble de données, avec la répétition:
Enfin, sklearn contient plusieurs méthodes de validation (k-fold, laissez-n-out, ...). Il inclut également plus avancé "l'échantillonnage stratifié" méthodes que de créer une partition de données qui est en équilibre avec le respect de certaines fonctionnalités, par exemple pour s'assurer qu'il y a la même proportion d'exemples positifs et négatifs dans la formation et l'ensemble de test.
Il y a une autre option qui vient nécessite d'utiliser des scikit-learn. Comme scikit wiki décrit, vous pouvez utiliser les instructions suivantes:
De cette façon, vous pouvez conserver la synchronisation des étiquettes pour les données que vous êtes en train de séparer de formation et de test.
Juste une remarque. Dans le cas où vous souhaitez former, de test ET de validation des ensembles, vous pouvez le faire:
Ces paramètres vont donner à 70 % à la formation, et de 15 % pour chacun de tester et de val-ensembles. Espérons que cette aide.
from sklearn.cross_validation import train_test_split
à rendre clair ce que le module que vous utiliseza=0.7
,b=0.15
,c=0.15
, etd = dataset
,N=len(dataset)
, puisx_train = dataset[0:int(a*N)]
,x_test = dataset[int(a*N):int((a+b)*N)]
, etx_val = dataset[int((a+b)*N):]
.Comme
sklearn.cross_validation
module était obsolète, vous pouvez utiliser:Vous pouvez également envisager de stratifié de la division de la formation et de jeu de test. Startified division génère également de la formation et de jeu de test au hasard, mais de telle manière que la classe d'origine proportions sont conservées. Ce qui rend la formation et l'essai des ensembles de mieux refléter les propriétés du jeu de données d'origine.
Ce code affiche:
value_inds
sont vraiment des indices, mais la sortie ne sont pas des indices, seulement des masques.J'ai écrit une fonction pour mon propre projet pour le faire (il ne doit pas utiliser numpy, tout de même):
Si vous voulez les morceaux d'être randomisés, juste aléatoire de la liste avant de la passer en.
Voici un code pour diviser les données en n=5 plis dans un stratifié de manière
Grâce pberkes pour votre réponse. J'ai juste modifié pour éviter les (1) de remplacement pendant l'échantillonnage (2) dupliqué cas sont à la fois la formation et les tests:
Après avoir fait un peu de lecture, et en prenant en compte les nombreux (..) les différentes façons de diviser les données pour l'apprentissage et le test, j'ai décidé de timeit!
J'ai utilisé 4 méthodes différentes (non d'entre eux sont à l'aide de la bibliothèque sklearn, qui je suis sûre ne donnera les meilleurs résultats, en donnant qu'il est bien conçu et testé le code):
méthode 3 gagné de loin, avec le temps le plus court, après que la méthode 1 et la méthode 2 et 4 découvert pour être vraiment inefficace.
Le code pour les 4 méthodes différentes, j'ai chronométré:
Et pour le temps, le temps minimum d'exécution de 3 répétitions de 1000 boucles est:
J'espère que c'est utile!