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 vraiment quels sont les ensembles de validation et de test.
L'enseignant dit:
70% devraient être des cas de train, 10% des cas de test et les 20% restants devraient être des cas de validation.
modifier
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
modifier
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, compte tenu des données de validation entrées/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
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é votre entraînement, vous courez contre votre série de tests et vérifiez que la précision est suffisante.
Training Set: cet ensemble de données est utilisé pour ajuster les poids sur le réseau de neurones.
Jeu de validation: cet ensemble de données est utilisé pour minimiser les surajustements. Vous ne réglez pas les poids du réseau avec cet ensemble de données, vous vous contentez de vérifier que toute augmentation de la précision par rapport à l'ensemble de données d'apprentissage entraîne 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 n’a pas été formé (c’est-à-dire un 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, vous surchargez votre réseau de neurones et vous devez arrêter votre 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.
Ensemble d'apprentissage : ensemble d'exemples utilisés pour l'apprentissage, c'est-à-dire pour ajuster les paramètres [c'est-à-dire les poids] du classificateur.
Jeu de validation : ensemble d'exemples utilisés pour ajuster les paramètres [c'est-à-dire l'architecture, pas de pondérations] d'un classificateur, par exemple pour choisir le nombre de masques cachés. unités dans un réseau de neurones.
Ensemble de tests : ensemble d'exemples utilisés uniquement pour évaluer les performances [généralisation] d'un classifieur spécifié.
From ftp://ftp.sas.com/pub/neural/FAQ1.txt section " Quelle est la population, l’échantillon, le kit de formation, le kit de conception, la 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 ensemble de test, il se peut que ce ne soit pas un très bon point ni un très mauvais point dans la surface généré 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 pondération pour le jeu d’entraînement, mais devrait également être capable de prédire de nouvelles données (qui ne font pas partie du jeu d’entraînement) avec une bonne erreur. En d'autres termes, le réseau devrait pouvoir généraliser les exemples de sorte qu'il apprenne les données et ne se contente pas de mémoriser ou de charger le jeu de formation en sur-ajustant la formation. Les données.
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 former le réseau. Vous entraînez le réseau avec un ensemble de données que vous appelez l'ensemble de données d'apprentissage. Si vous utilisez un algorithme basé sur un gradient pour entraîner le réseau, la surface d'erreur et le gradient à un moment donné dépendent entièrement du jeu de données d'apprentissage. Ce dernier est donc directement utilisé pour ajuster les poids. Pour vous assurer de ne pas surcharger le réseau, vous devez entrer le jeu de données de validation sur le réseau et vérifier si l'erreur se situe dans les limites. Etant donné que le jeu de validation n’utilise pas directement pour ajuster les poids du réseau, une bonne erreur pour la validation et le jeu de tests indique que le réseau prédit bien pour les exemples de trains, il devrait également bien fonctionner en cas de nouvelle exemple, sont présentés au réseau qui n’a pas été utilisé dans le processus de formation.
Arrêter tôt est un moyen d'arrêter l'entraînement. Il existe différentes variations disponibles, le contour principal est surveillé, les erreurs du train et du jeu de validation sont surveillées, l'erreur du train diminue à chaque itération (backprop et frères) et tout d'abord l'erreur de validation diminue. L'entraînement est arrêté au moment où l'erreur de validation commence à augmenter. La configuration de poids à ce stade indique un modèle, qui prédit bien les données d'apprentissage, ainsi que les données qui ne sont pas vues par le réseau. Mais parce que les données de validation en fait affectent la configuration de poids indirectement pour sélectionner la configuration de poids. C'est ici qu'intervient l'ensemble de tests. Cet ensemble de données n'est jamais utilisé dans le processus de formation. Une fois qu'un modèle est sélectionné en fonction du jeu de validation, les données du jeu de test sont appliquées au modèle de réseau et l'erreur est trouvée pour ce jeu. Cette erreur est représentative de l’erreur que nous pouvons attendre de données absolument nouvelles pour le même problème.
EDIT:
De plus, si vous ne disposez pas de suffisamment de données pour un jeu de validation, vous pouvez utiliser validation croisée pour ajuster les paramètres et estimer l'erreur de test.
Le jeu de validation croisée est utilisé pour la sélection de modèle. Par exemple, sélectionnez le modèle polynomial contenant le moins d'erreurs pour un jeu 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
Supposons que vous entraîniez un modèle sur un ensemble de formation, puis que vous mesuriez ses performances sur un ensemble de test. Vous pensez qu'il reste encore des améliorations à apporter et essayez de modifier les hyper-paramètres (si le modèle est un réseau de neurones - les hyper-paramètres sont le nombre de couches, ou 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 le jeu de tests et de formation), vous risquez de ne pas obtenir le même niveau de précision. Ceci est dû au fait que vous avez introduit un biais lors du réglage des hyper-paramètres pour obtenir une meilleure précision sur l'ensemble de tests. Vous avez fondamentalement adapté le modèle et les hyper-paramètres pour produire le meilleur modèle pour cet ensemble de formation particulier.
Une solution courante consiste à diviser davantage le jeu d'apprentissage pour créer un jeu de validation. Maintenant vous avez
Vous procédez comme auparavant, mais cette fois-ci, vous utilisez le jeu de validation pour tester les performances et modifier les hyper-paramètres. Plus spécifiquement, vous entraînez plusieurs modèles avec différents hyper-paramètres sur le jeu d’entraînement réduit (c’est-à-dire le jeu d’entraînement complet moins le jeu de validation) et vous sélectionnez le modèle qui fonctionne le mieux sur le jeu de validation.
Une fois que vous avez sélectionné le modèle le plus performant sur le jeu de validation, vous entraînez le meilleur modèle sur le jeu de formation complet (y compris le jeu de validation), ce qui vous donne le modèle final.
Enfin, vous évaluez ce modèle final sur l'ensemble de tests pour obtenir une estimation de l'erreur de généralisation.