Existe-t-il une règle empirique pour diviser un ensemble de données en ensembles d'apprentissage et de validation?

195

Existe-t-il une règle de base pour diviser au mieux les données en ensembles de formation et de validation? Un partage égal 50/50 est-il conseillé? Ou y a-t-il des avantages évidents à avoir plus de données d'entraînement par rapport aux données de validation (ou vice versa)? Ou ce choix dépend-il à peu près de l'application?

J'utilise principalement 80% / 20% des données de formation et de validation, respectivement, mais j'ai choisi cette division sans aucune raison de principe. Une personne plus expérimentée en apprentissage automatique peut-elle me conseiller?

robguinness
la source
Si vous n'avez pas trop de données disponibles, considérez en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Réponses:

221

Il existe deux problèmes concurrents: avec moins de données d'entraînement, vos estimations de paramètres ont une plus grande variance. Avec moins de données de test, vos statistiques de performances auront une plus grande variance. D'une manière générale, vous devez vous préoccuper de diviser les données de manière à ce qu'aucune des deux variations ne soit trop élevée, ce qui est davantage lié au nombre absolu d'instances dans chaque catégorie qu'au pourcentage.

Si vous avez un total de 100 instances, vous êtes probablement coincé avec la validation croisée, car aucune répartition unique ne vous donnera une variance satisfaisante dans vos estimations. Si vous avez 100 000 instances, peu importe que vous choisissiez une répartition 80:20 ou une division 90:10 (en effet, vous pouvez choisir d'utiliser moins de données d'entraînement si votre méthode est particulièrement intensive en calcul).

En supposant que vous ayez suffisamment de données pour effectuer des données de test retenues appropriées (plutôt qu'une validation croisée), ce qui suit est un moyen instructif de gérer les variances:

  1. Divisez vos données en formation et en test (80/20 est en effet un bon point de départ)
  2. Divisez les données d' entraînement en formation et validation (encore une fois, 80/20 est une répartition équitable).
  3. Sous-échantillonnez des sélections aléatoires de vos données d'entraînement, entraînez le classificateur avec cela et enregistrez les performances sur l'ensemble de validation
  4. Essayez une série d'exécutions avec différentes quantités de données d'entraînement: échantillonnez au hasard 20%, disons 10 fois et observez les performances sur les données de validation, puis faites de même avec 40%, 60%, 80%. Vous devriez voir à la fois de meilleures performances avec plus de données, mais également une variance plus faible entre les différents échantillons aléatoires
  5. Pour avoir une idée de la variance due à la taille des données de test, effectuez la même procédure en sens inverse. Entraînez-vous sur toutes vos données d'entraînement, puis échantillonnez au hasard un pourcentage de vos données de validation plusieurs fois et observez les performances. Vous devriez maintenant constater que la performance moyenne sur de petits échantillons de vos données de validation est à peu près la même que la performance sur toutes les données de validation, mais la variance est beaucoup plus élevée avec un plus petit nombre d'échantillons de test
Ben Allison
la source
Merci, c'est également très utile! Je vais essayer. Pour info, j'ai environ 6000 instances de données d'entraînement. J'utilise SVM, donc les performances sont un peu un problème.
robguinness
1
FWIW, la variance des performances peut être calculée en classant toutes les instances une fois, en notant les décisions quant à savoir si elles sont correctes ou non, puis en échantillonnant ces décisions au lieu des instances de test pour produire les effets de l'utilisation de différentes tailles de jeux de test
Ben Allison
Et 6000 instances devraient suffire pour que les différences entre l'utilisation de 10% ou 20% pour les tests ne soient pas si grandes (vous pouvez le confirmer en utilisant la méthode que je décris)
Ben Allison
1
Re-bonjour. Je suis un peu confus au point 5. Vous avez dit "puis échantillonnez au hasard un pourcentage de vos données de validation plusieurs fois". Vouliez-vous plutôt voir les données de test ? Si je comprends bien, je dois d'abord diviser mes données en ensembles de données d'entraînement et de test, puis une partie de mon ensemble de données d'entraînement en un ensemble de données de validation. Donc, à l'étape 5, si je mesure la variance sur mes données de test, ne devrais-je pas échantillonner au hasard des populations à partir de mes données de test? Ou est-ce que je manque quelque chose?
robguinness
2
Le fait est que pendant que vous jouez avec les paramètres, en observant les effets de changer les choses, vous devriez utiliser vos données de validation pour tester. Si vous commencez à regarder vos données de test et à choisir des stratégies en fonction de ce qui vous donne le score le plus élevé, vous aurez une idée exagérée des performances de votre méthode. Lorsque tous vos paramètres sont définis et les décisions prises, puis exécuter sur vos données de test. Cela vous permet de savoir quel type de performance vous obtiendrez sur des données véritablement nouvelles et non observées (ce qui vous intéresse probablement!)
Ben Allison
54

Vous seriez surpris d'apprendre que 80/20 est un ratio assez courant, souvent appelé le principe de Pareto . C'est généralement une valeur sûre si vous utilisez ce ratio.

Cependant, selon la méthodologie de formation / validation que vous employez, le ratio peut changer. Par exemple: si vous utilisez la validation croisée 10 fois, vous vous retrouverez avec un ensemble de validation de 10% à chaque fois.

Il y a eu quelques recherches pour déterminer quel est le bon rapport entre l'ensemble d'apprentissage et l'ensemble de validation :

La fraction de motifs réservée à l'ensemble de validation doit être inversement proportionnelle à la racine carrée du nombre de paramètres réglables libres.

Dans leur conclusion, ils spécifient une formule:

Le rapport de taille de l'ensemble de validation (v) à l'ensemble d'apprentissage (t), v / t, échelles comme ln (N / h-max), où N est le nombre de familles de dispositifs de reconnaissance et h-max est la plus grande complexité de ces familles.

Ce qu'ils entendent par complexité est:

Chaque famille de reconnaissance est caractérisée par sa complexité, qui peut ou non être liée à la dimension VC , à la longueur de la description, au nombre de paramètres ajustables ou à d'autres mesures de complexité.

En prenant la première règle empirique (c'est-à-dire que l'ensemble de validation doit être inversement proportionnel à la racine carrée du nombre de paramètres ajustables libres), vous pouvez conclure que si vous avez 32 paramètres ajustables, la racine carrée de 32 est ~ 5,65, la fraction doit être 1 / 5,65 ou 0,177 (v / t). Environ 17,7% devraient être réservés à la validation et 82,3% à la formation.

Kiril
la source
2
Le document, pour ceux qui pourraient avoir du mal à le charger comme moi (je ne sais pas pourquoi), est: "Une loi de mise à l'échelle pour la taille du ratio de l'ensemble de formation de validation" (I. Guyon, 1996, Rapport technique non publié, AT&T Bell Laboratories ).
theforestecologist
3
La règle empirique a-t-elle un sens? Si vous avez deux paramètres ajustables, le rapport est de 0,77, ce qui signifie que vous utiliseriez 77% pour la validation. Imho le problème est la définition libre des paramètres. Pour un SVM linéaire, vous pouvez définir le paramètre de pénalité C pour le terme d'erreur qui est un paramètre, mais la complexité est plus élevée Dimension + 1 pour un SVM.
Reed Richards
4
Alors la taille de mon test doit-elle être de 1 si j'ai un réseau neuronal ..?
YellowPillow
51

L'année dernière, j'ai suivi le cours d'apprentissage automatique en ligne du professeur Andrew Ng. Sa recommandation était:

Formation : 60%

Validation croisée : 20%

Test : 20%

Upul Bandara
la source
20
coursera.org/learn/deep-neural-network/lecture/cxG1s/... in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Il suggère que cela pourrait être 99,5: 0,25: 0,25.
Nobu
9

Eh bien, vous devriez penser à une dernière chose.

Si vous avez un jeu de données vraiment volumineux, comme 1 000 000 d'exemples, la division 80/10/10 peut être inutile, car 10% = 100 000 exemples n'est pas nécessaire pour indiquer que le modèle fonctionne correctement.

Peut-être que 99 / 0,5 / 0,5 est suffisant, car 5000 exemples peuvent représenter la plupart de la variance des données et vous pouvez facilement dire que le modèle fonctionne bien sur la base de ces 5000 exemples en test et en développement.

DavidS1992
la source
0,5% dans l'ensemble de validation pourrait être suffisant, mais je dirais que vous prenez un risque important et inutile car vous ne savez pas, c'est assez ou pas. Votre formation peut facilement se tromper si vous utilisez un jeu de validation trop petit, mais il est presque impossible que cela se passe mal en utilisant un grand jeu de validation.
Björn Lindqvist le
2

Supposons que vous ayez moins de données, je suggère d'essayer 70%, 80% et 90% et tester ce qui donne un meilleur résultat. Dans le cas de 90%, il y a des chances que pour 10% de test, vous obteniez une précision médiocre.

Rishi Bansal
la source
1

Peut-être un 63,2% / 36,8% est un choix raisonnable. La raison en serait que si vous aviez une taille d'échantillon totale n et que vous vouliez échantillonner aléatoirement avec remplacement (c'est-à-dire rééchantillonner, comme dans le bootstrap statistique) n cas sur les n initiaux , la probabilité qu'un cas individuel soit sélectionné dans le le rééchantillonnage serait d'environ 0,632, à condition que n ne soit pas trop petit, comme expliqué ici: https://stats.stackexchange.com/a/88993/16263

Pour un échantillon de n = 250, la probabilité qu'un cas individuel soit sélectionné pour un rééchantillonnage à 4 chiffres est de 0,6329. Pour un échantillon de n = 20000, la probabilité est de 0,6321.

user16263
la source
1

Tout dépend des données disponibles. Si vous avez une quantité considérable de données, 80/20 est un bon choix comme mentionné ci-dessus. Mais si vous ne faites pas de validation croisée avec une répartition 50/50, cela peut vous aider beaucoup plus et vous empêcher de créer un modèle sur-ajustant vos données d'entraînement.

Mayank
la source