Quelle est la différence entre le train, la validation et le test set, dans les réseaux neuronaux?

155

J'utilise cette bibliothèque pour implémenter un agent d'apprentissage.

J'ai généré les cas de formation, mais je ne sais pas avec certitude quels sont les ensembles de validation et de test.
L'enseignant dit:

70% devraient être des cas de train, 10% seront des cas de test et les 20% restants devraient être des cas de validation.

Éditer

J'ai ce code pour la formation, mais je ne sais pas quand arrêter la formation.

  def train(self, train, validation, N=0.3, M=0.1):
    # N: learning rate
    # M: momentum factor
    accuracy = list()
    while(True):
        error = 0.0
        for p in train:
            input, target = p
            self.update(input)
            error = error + self.backPropagate(target, N, M)
        print "validation"
        total = 0
        for p in validation:
            input, target = p
            output = self.update(input)
            total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output

        accuracy.append(total)
        print min(accuracy)
        print sum(accuracy[-5:])/5
        #if i % 100 == 0:
        print 'error %-14f' % error
        if ? < ?:
            break

Éditer

Je peux obtenir une erreur moyenne de 0,2 avec les données de validation, après peut-être 20 itérations d'entraînement, cela devrait être de 80%?

erreur moyenne = somme de la différence absolue entre la cible de validation et la sortie, étant donné l'entrée des données de validation / la taille des données de validation.

1
        avg error 0.520395 
        validation
        0.246937882684
2
        avg error 0.272367   
        validation
        0.228832420879
3
        avg error 0.249578    
        validation
        0.216253590304
        ...
22
        avg error 0.227753
        validation
        0.200239244714
23
        avg error 0.227905    
        validation
        0.199875013416
Daniel
la source
1
"... ça devrait être 80%?" Non, l'erreur moyenne et le pourcentage correct sont deux choses différentes. Supposons que votre valeur cible soit 5,0 et que votre neurone renvoie 4,8 (soit une erreur de 0,2). En fonction des données, une erreur de 0,2 peut être acceptable, donc si l'erreur est suffisamment petite, vous pouvez considérer que cette instance est correctement spécifiée. Donc, si vous avez 10 cibles et que votre erreur de classification pour 7 d'entre elles se situait dans la plage acceptable, alors vous auriez classé correctement 70% des données.
Kiril
Quels sont les critères de résiliation requis par votre enseignant?
Kiril

Réponses:

292

Les ensembles de formation et de validation sont utilisés pendant la formation.

for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

Une fois que vous avez terminé la formation, vous exécutez votre test et vérifiez que la précision est suffisante.

Ensemble d'entraînement : cet ensemble de données est utilisé pour ajuster les poids sur le réseau neuronal.

Ensemble de validation : cet ensemble de données est utilisé pour minimiser le surajustement. Vous n'ajustez pas les poids du réseau avec cet ensemble de données, vous vérifiez simplement que toute augmentation de la précision sur l'ensemble de données d'entraînement entraîne en fait une augmentation de la précision par rapport à un ensemble de données qui n'a pas été montré au réseau auparavant, ou du moins le réseau ne s'y est pas entraîné (c'est-à-dire ensemble de données de validation). Si la précision sur l'ensemble de données d'entraînement augmente, mais que la précision sur l'ensemble de données de validation reste la même ou diminue, alors vous suréquipez votre réseau de neurones et vous devriez arrêter l'entraînement.

Ensemble de test : cet ensemble de données est utilisé uniquement pour tester la solution finale afin de confirmer la puissance prédictive réelle du réseau.

Kiril
la source
son python: x je ne peux pas obtenir un critère d'arrêt .. les valeurs convergent .. mais toujours avec une certaine flutuation ..
Daniel
@Daniel, la précision de la formation fluctue-t-elle ou la précision de la validation fluctue-t-elle? Il est possible que votre précision de validation fluctue, mais il est moins probable que la précision de la formation fluctue. Lorsque vous dites "input, target = p", cela signifie-t-il que vous définissez les deux sur p?
Kiril
Je ne suis pas très bon avec python, donc le code me semble un peu déroutant ... en général, vous voulez arrêter l'entraînement lorsque votre précision de validation atteint un certain seuil, disons 70% ou 90%, tout ce qui a du sens pour le domaine de vos données.
Kiril
5
L'ensemble de validation est utilisé dans le processus de formation. L'ensemble de test ne l'est pas. L'ensemble de test permet 1) de voir si l'ensemble d'entraînement était suffisant et 2) si l'ensemble de validation a permis d'éviter le surajustement. Si vous utilisez l'ensemble de test dans le processus de formation, ce sera juste un autre ensemble de validation et il ne montrera pas ce qui se passe lorsque de nouvelles données sont alimentées dans le réseau.
Anton Andreev
2
@AntonAndreev Je ne comprends pas. Selon votre réponse, ni le validation setni le ne test setsont utilisés pour régler les poids du réseau neuronal. Pourquoi ne pouvez-vous pas utiliser le même ensemble de données, non utilisé pour entraîner les pondérations, que le validation setet test set? Que gagne-t-on à les séparer?
Gili
77

Ensemble Formation : Un ensemble d'exemples utilisés pour l' apprentissage, qui est d'adapter les paramètres [c. -à- poids] du classificateur.

Ensemble de validation : ensemble d'exemples utilisés pour régler les paramètres [c'est-à-dire l'architecture, pas les poids] d'un classificateur, par exemple pour choisir le nombre d'unités cachées dans un réseau neuronal.

Ensemble de tests : ensemble d'exemples utilisés uniquement pour évaluer les performances [généralisation] d'un classificateur entièrement spécifié.

À partir de la section ftp://ftp.sas.com/pub/neural/FAQ1.txt " Quelle est la population, échantillon, ensemble de formation, ensemble de conception, validation "

La surface d'erreur sera différente pour différents ensembles de données de votre ensemble de données (apprentissage par lots). Par conséquent, si vous trouvez un très bon minimum local pour les données de votre jeu de test, cela peut ne pas être un très bon point, et peut être un très mauvais point dans la surface générée par un autre ensemble de données pour le même problème. Par conséquent, vous devez calculer un tel modèle qui non seulement trouve une bonne configuration de poids pour l'ensemble d'entraînement, mais devrait également être capable de prédire de nouvelles données (qui ne sont pas dans l'ensemble d'apprentissage) avec une bonne erreur. En d'autres termes, le réseau devrait être capable de généraliser les exemples afin qu'il apprenne les données et ne se contente pas de se souvenir ou de charger l'ensemble d'apprentissage en surappuyant les données d'apprentissage.

L'ensemble de données de validation est un ensemble de données pour la fonction que vous souhaitez apprendre, que vous n'utilisez pas directement pour entraîner le réseau. Vous entraînez le réseau avec un ensemble de données que vous appelez l'ensemble de données d'entraînement. Si vous utilisez un algorithme basé sur le gradient pour entraîner le réseau, la surface d'erreur et le gradient à un moment donné dépendront complètement de l'ensemble de données d'apprentissage, de sorte que l'ensemble de données d'apprentissage est directement utilisé pour ajuster les poids. Pour vous assurer de ne pas suradapter le réseau, vous devez saisir l'ensemble de données de validation sur le réseau et vérifier si l'erreur se situe dans une certaine plage. Parce que l'ensemble de validation n'est pas utilisé directement pour ajuster les poids du réseau, donc une bonne erreur pour la validation et également l'ensemble de test indique que le réseau prédit bien pour les exemples de trains,

L'arrêt prématuré est un moyen d'arrêter l'entraînement. Il existe différentes variantes disponibles, le plan principal est que les erreurs de train et de jeu de validation sont surveillées, l'erreur de train diminue à chaque itération (backprop et frères) et au début l'erreur de validation diminue. La formation est arrêtée au moment où l'erreur de validation commence à augmenter. La configuration du poids à ce stade indique un modèle, qui prédit bien les données d'entraînement, ainsi que les données qui ne sont pas vues par le réseau . Mais parce que les données de validation en faitaffecte indirectement la configuration du poids pour sélectionner la configuration du poids. C'est là qu'intervient l'ensemble de test. Cet ensemble de données n'est jamais utilisé dans le processus d'apprentissage. Une fois qu'un modèle est sélectionné en fonction de l'ensemble de validation, les données de l'ensemble de test sont appliquées au modèle de réseau et l'erreur pour cet ensemble est détectée. Cette erreur est représentative de l'erreur que l'on peut attendre de données absolument nouvelles pour le même problème.

ÉDITER:

En outre, dans le cas où vous ne disposez pas de suffisamment de données pour un jeu de validation, vous pouvez utiliser la validation croisée pour ajuster les paramètres et estimer l'erreur de test.

phoxis
la source
11
Je sais que je ne suis pas censé publier des commentaires insignifiants comme celui-ci, mais je voulais vous dire que j'apprécie beaucoup cette réponse :)
Llamageddon
6

L'ensemble de validation croisée est utilisé pour la sélection du modèle, par exemple, sélectionnez le modèle polynomial avec le moins d'erreurs pour un ensemble de paramètres donné. L'ensemble de test est ensuite utilisé pour signaler l'erreur de généralisation sur le modèle sélectionné. De là: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

user2410953
la source
1
Je prends aussi les cours d'Andrew Ng et je suis d'accord avec vous. L'ensemble de validation doit faire partie de la formation. Il ne doit être utilisé que pour activer les hyperparamètres.
Jack Peng
4

Nous créons un ensemble de validation pour

  • Mesurer la façon dont un modèle se généralise, pendant la formation
  • Dites-nous quand arrêter la formation d'un modèle; lorsque la perte de validation cesse de diminuer (et en particulier lorsque la perte de validation commence à augmenter et la perte de formation diminue toujours)

Pourquoi le jeu de validation utilisé :

Pourquoi le jeu de validation utilisé

Nil Akash
la source
3

Supposons que vous entraîniez un modèle sur un ensemble d'entraînement, puis que vous mesuriez ses performances sur un ensemble de test. Vous pensez qu'il y a encore place à l'amélioration et vous essayez d'ajuster les hyper-paramètres (si le modèle est un réseau de neurones - les hyper-paramètres sont le nombre de couches ou de nœuds dans les couches). Maintenant, vous obtenez une performance légèrement meilleure. Cependant, lorsque le modèle est soumis à d'autres données (pas dans l'ensemble de test et d'apprentissage), vous risquez de ne pas obtenir le même niveau de précision. En effet, vous avez introduit un biais lors de la modification des hyper-paramètres pour obtenir une meilleure précision sur l'ensemble de test. Vous avez essentiellement adapté le modèle et les hyper-paramètres pour produire le meilleur modèle pour cet ensemble d'entraînement particulier.

Une solution courante consiste à diviser davantage l'ensemble d'entraînement pour créer un ensemble de validation . Maintenant vous avez

  • ensemble d'entraînement
  • ensemble de test
  • ensemble de validation

Vous procédez comme précédemment, mais cette fois, vous utilisez le jeu de validation pour tester les performances et ajuster les hyper-paramètres. Plus spécifiquement, vous entraînez plusieurs modèles avec divers hyper-paramètres sur l'ensemble d'apprentissage réduit (c'est-à-dire l'ensemble d'entraînement complet moins l'ensemble de validation) et vous sélectionnez le modèle qui fonctionne le mieux sur l'ensemble de validation.

Une fois que vous avez sélectionné le modèle le plus performant sur l'ensemble de validation, vous entraînez le meilleur modèle sur l'ensemble d'apprentissage complet (y compris l'ensemble de validation), ce qui vous donne le modèle final.

Enfin, vous évaluez ce modèle final sur l'ensemble de test pour obtenir une estimation de l'erreur de généralisation.

Aditya
la source
0

Jeu de données d' entraînement : échantillon de données utilisé pour ajuster le modèle.

Ensemble de données de validation : échantillon de données utilisé pour fournir une évaluation non biaisée d'un ajustement de modèle sur l'ensemble de données d'entraînement lors du réglage des hyperparamètres du modèle. L'évaluation devient plus biaisée au fur et à mesure que la compétence sur l'ensemble de données de validation est intégrée à la configuration du modèle.

Ensemble de données de test : échantillon de données utilisé pour fournir une évaluation impartiale d'un ajustement final du modèle sur l'ensemble de données d'entraînement.

Farzana Khan
la source
-15

En termes simples, définissez l'ensemble d'entraînement, l'ensemble de tests, l'ensemble de validation

Ensemble d'entraînement: est utilisé pour rechercher les voisins les plus proches. Ensemble de validation: sert à trouver différents k qui s'appliquent à l'ensemble de trains. Ensemble de test: est utilisé pour trouver la précision maximale et les données invisibles à l'avenir.

Gaurav Pal
la source