Nous écrivons un petit ANN qui est censé classer 7000 produits en 7 classes sur la base de 10 variables d'entrée.
Pour ce faire, nous devons utiliser la validation croisée k-fold, mais nous sommes un peu confus.
Nous avons cet extrait de la diapositive de présentation:
Quels sont exactement les ensembles de validation et de test?
D'après ce que nous comprenons, nous parcourons les 3 ensembles d'entraînement et ajustons les poids (Epoque unique). Alors que faisons-nous de la validation? Parce que d'après ce que je comprends, c'est que l'ensemble de test est utilisé pour obtenir l'erreur du réseau.
Ce qui se passe ensuite est aussi déroutant pour moi. Quand le crossover a-t-il lieu?
Si ce n'est pas trop demander, une liste d'étapes serait appréciée
Vous semblez un peu confus (je me souviens que je l'étais aussi) alors je vais vous simplifier les choses. ;)
Chaque fois que l'on vous confie une tâche telle que la conception d'un réseau de neurones, vous recevez souvent également un exemple de jeu de données à utiliser à des fins de formation. Supposons que vous entraînez un système de réseau neuronal simple Y = W · X
où Y
est la sortie calculée à partir du calcul du produit scalaire (·) du vecteur de poids W
avec un vecteur échantillon donné X
. Maintenant, la façon naïve de procéder serait d'utiliser l'ensemble des données de, disons, 1000 échantillons pour former le réseau neuronal. En supposant que l'entraînement converge et que vos poids se stabilisent, vous pouvez alors dire en toute sécurité que votre réseau classera correctement les données d'entraînement. Mais qu'advient-il du réseau s'il est présenté avec des données inédites? De toute évidence, le but de ces systèmes est de pouvoir généraliser et classer correctement les données autres que celles utilisées pour la formation.
Dans toute situation réelle, cependant, les données inédites/nouvelles ne sont disponibles qu'une fois que votre réseau de neurones est déployé dans un environnement de production, appelons-le. Mais comme vous ne l'avez pas testé correctement, vous allez probablement passer un mauvais moment. :) Le phénomène par lequel tout système d'apprentissage correspond à son ensemble de formation presque parfaitement mais échoue constamment avec des données invisibles est appelé surapprentissage .
Voici venir les parties de validation et de test de l'algorithme. Revenons à l'ensemble de données d'origine de 1000 échantillons. Ce que vous faites, vous le divisez en trois ensembles - formation , validation et test (Tr
, Va
et Te
) - en utilisant des proportions soigneusement sélectionnées. (80-10-10)% est généralement une bonne proportion, où:
Tr = 80%
Va = 10%
Te = 10%
Maintenant, ce qui se passe, c'est que le réseau neuronal est formé sur l'ensemble Tr
et ses poids sont correctement mis à jour. L'ensemble de validation Va
est ensuite utilisé pour calculer l'erreur de classification E = M - Y
en utilisant les poids résultant de la formation, où M
est le vecteur de sortie attendu tiré de l'ensemble de validation et Y
est la sortie calculée résultant de la classification (Y = W * X
). Si l'erreur est supérieure à un seuil défini par l'utilisateur, l'ensemble formation-validation Epoch est répété. Cette phase d'apprentissage se termine lorsque l'erreur calculée à l'aide de l'ensemble de validation est jugée suffisamment faible.
Maintenant, une astuce intelligente consiste à sélectionner au hasard les échantillons à utiliser pour la formation et la validation dans l'ensemble total Tr + Va
à chaque itération Epoch. Cela garantit que le réseau ne sur-adaptera pas l'ensemble de formation.
L'ensemble de tests Te
est ensuite utilisé pour mesurer les performances du réseau. Ces données sont parfaites à cet effet car elles n'ont jamais été utilisées pendant la phase de formation et de validation. Il s'agit en fait d'un petit ensemble de données inédites, censées imiter ce qui se passerait une fois le réseau déployé dans l'environnement de production.
La performance est à nouveau mesurée en terme d'erreur de classification comme expliqué ci-dessus. La performance peut également (ou peut-être même devrait) être mesurée en termes de précision et rappel afin de savoir où et comment l'erreur se produit, mais c'est le sujet d'une autre Q&R.
Ayant compris ce mécanisme de formation-validation-test, on peut encore renforcer le réseau contre le sur-ajustement en effectuant validation croisée K . Il s'agit en quelque sorte d'une évolution de la ruse intelligente que j'ai expliquée ci-dessus. Cette technique implique d'effectuer K cycles de formation-validation-test sur différents, non chevauchants et à proportions égales Tr
, Va
et Te
définit .
Donné k = 10
, pour chaque valeur de K, vous diviserez votre ensemble de données en Tr+Va = 90%
et Te = 10%
et vous exécuterez l'algorithme, enregistrant les performances du test.
k = 10
for i in 1:k
# Select unique training and testing datasets
KFoldTraining <-- subset(Data)
KFoldTesting <-- subset(Data)
# Train and record performance
KFoldPerformance[i] <-- SmartTrain(KFoldTraining, KFoldTesting)
# Compute overall performance
TotalPerformance <-- ComputePerformance(KFoldPerformance)
Je prends l'intrigue de renommée mondiale ci-dessous de wikipedia pour montrer comment l'ensemble de validation aide à empêcher le sur-ajustement. L'erreur d'apprentissage, en bleu, tend à diminuer au fur et à mesure que le nombre d'époques augmente: le réseau tente donc de faire correspondre exactement l'ensemble d'apprentissage. L'erreur de validation, en rouge, par contre suit un profil différent en forme de U. Le minimum de la courbe est quand idéalement la formation doit être arrêtée car c'est le point où l'erreur de formation et de validation est la plus faible.
Pour plus de références cet excellent livre vous donnera à la fois une bonne connaissance de l'apprentissage automatique ainsi que plusieurs migraines. A vous de décider si cela en vaut la peine. :)
Divisez vos données en K plis qui ne se chevauchent pas. Faire en sorte que chaque pli K contienne un nombre égal d'éléments de chacune des m classes (validation croisée stratifiée; si vous avez 100 éléments de la classe A et 50 de la classe B et que vous effectuez une validation 2 plis, chaque pli doit contenir un aléatoire 50 éléments de A et 25 de B).
Pour i in 1..k:
Vous avez maintenant collecté des résultats agrégés dans tous les plis. Ceci est votre performance finale. Si vous allez appliquer cela pour de vrai, dans la nature, utilisez les meilleurs paramètres de la recherche de grille pour vous entraîner sur toutes les données.