Validation croisée imbriquée pour la sélection du modèle

92

Comment utiliser la validation croisée imbriquée pour la sélection du modèle ?

D'après ce que j'ai lu en ligne, les CV imbriqués fonctionnent comme suit:

  • Il y a la boucle CV interne, où nous pouvons effectuer une recherche sur la grille (par exemple, exécuter un pli en K pour chaque modèle disponible, par exemple une combinaison d'hyperparamètres / caractéristiques).
  • Il y a la boucle CV externe, où nous mesurons la performance du modèle qui a gagné dans le pli interne, sur un pli externe séparé.

À la fin de ce processus, nous aboutissons à modèles ( K étant le nombre de plis dans la boucle externe). Ces modèles sont ceux qui ont gagné lors de la recherche de grille dans le CV interne et ils sont probablement différents (par exemple, des SVM avec des noyaux différents, entraînés avec éventuellement des fonctionnalités différentes, en fonction de la recherche de grille).KK

Comment choisir un modèle à partir de cette sortie? Il me semble que la sélection du meilleur modèle parmi ces modèles gagnants ne serait pas une comparaison équitable puisque chaque modèle a été formé et testé sur différentes parties du jeu de données.K

Alors, comment puis-je utiliser un CV imbriqué pour la sélection de modèle?

J'ai également lu des discussions sur l'utilité de la sélection de modèles imbriqués pour analyser la procédure d'apprentissage. Quels types d'analyses / contrôles puis-je faire avec les scores que je reçois à partir des plis K extérieurs?

Amelio Vazquez-Reina
la source

Réponses:

77

Comment choisir un modèle à partir de cette sortie [validation croisée externe]?

Réponse courte: vous ne le faites pas.

Traitez la validation croisée interne dans le cadre de la procédure d’ajustement du modèle. Cela signifie que l’ajustement, y compris l’ajustement des hyper-paramètres (c’est là que se cache la validation croisée interne), est semblable à n’importe quelle autre routine d’esitmation de modèle.
La validation croisée externe estime la performance de cette approche d'ajustement du modèle. Pour cela, vous utilisez les hypothèses habituelles

  • kmodel.fitting.procedure
  • k

k

Alors, comment puis-je utiliser un CV imbriqué pour la sélection de modèle?

Le CV interne fait la sélection.

Il me semble que la sélection du meilleur modèle parmi ces K modèles gagnants ne serait pas une comparaison équitable puisque chaque modèle a été formé et testé sur différentes parties du jeu de données.

k

  • Ne pas avoir les mêmes données de test: comme vous voulez affirmer par la suite que les résultats du test se généralisent pour ne jamais voir des données, cela ne peut pas changer les choses.
  • Ne pas avoir les mêmes données d'entraînement:
    • si les modèles sont stables, cela ne fait aucune différence: Stable signifie ici que le modèle ne change pas (beaucoup) si les données d'apprentissage sont "perturbées" en remplaçant quelques cas par d'autres.
    • si les modèles ne sont pas stables, trois considérations sont importantes:
      1. k
      2. k
      3. Si l'instabilité est un problème réel, vous ne pouvez pas bien extrapoler les performances du modèle "réel".

Ce qui m'amène à votre dernière question:

Quels types d'analyses / contrôles puis-je faire avec les scores que je reçois à partir des plis K extérieurs?

  • vérifier la stabilité des prévisions (utiliser la validation croisée itérée / répétée)
  • vérifier la stabilité / variation des hyper-paramètres optimisés.
    D'une part, les hyper-paramètres très dispersés peuvent indiquer que l'optimisation interne n'a pas fonctionné. D'autre part, cela peut vous permettre de choisir les hyperparamètres sans l'étape d'optimisation coûteuse dans des situations similaires à l'avenir. Avec coûteuse, je ne parle pas de ressources de calcul, mais du fait que cette information "coûte" peut être mieux utilisée pour estimer les paramètres de modèle "normaux".

  • vérifiez la différence entre l'estimation interne et externe du modèle choisi. S'il y a une grande différence (l'intérieur est très suroptimiste), il y a un risque que l'optimisation interne ne fonctionne pas bien en raison de la sur-adaptation.


update @ user99889: Que faire si le CV externe détecte une instabilité?

Tout d'abord, détecter dans la boucle CV externe que les modèles ne donnent pas de prédictions stables à cet égard ne diffère pas vraiment de la détection du fait que l'erreur de prédiction est trop élevée pour l'application. C'est l'un des résultats possibles de la validation (ou de la vérification) du modèle, ce qui implique que le modèle que nous avons n'est pas adapté à son objectif.

Dans le commentaire répondant à @davips, je pensais aborder l'instabilité du CV interne - c'est-à-dire dans le cadre du processus d'optimisation du modèle.

Mais vous avez certainement raison: si nous modifions notre modèle en fonction des conclusions du CV externe, un autre cycle de tests indépendants du modèle modifié est nécessaire.
Cependant, l’instabilité dans le CV externe signifierait également que l’optimisation n’a pas été correctement configurée - donc, trouver l’instabilité dans le CV externe implique que le CV interne ne pénalise pas l’instabilité de la manière nécessaire - ce serait là mon principal objectif. critique dans une telle situation. En d'autres termes, pourquoi l'optimisation permet-elle / conduit-elle à des modèles fortement sur-équipés?

Cependant, il y a une particularité ici que IMHO peut excuser le changement ultérieur du modèle "final" après un examen attentif des circonstances exactes : comme nous avons détecté un surajustement, tout changement proposé (moins de df / plus restrictif ou agrégé) au modèle être dans le sens de la sur- adaptation moins (ou au moins des hyperparamètres qui sont moins enclins à sur-adapter). Le point de test indépendant est de détecter le surajustement - le sous-ajustement peut être détecté par les données déjà utilisées dans le processus de formation.

Donc, si nous parlons, par exemple, d’une réduction supplémentaire du nombre de variables latentes dans un modèle de PLS qui serait comparativement inoffensif (si le changement proposé était un type de modèle totalement différent, disons PLS au lieu de SVM, tous les paris seraient décevants. ), et je serais encore plus serein à ce sujet si je savais que nous en sommes de toute façon à une étape intermédiaire de la modélisation. Après tout, si les modèles optimisés sont toujours instables, il ne fait aucun doute que davantage de cas sont nécessaires. En outre, dans de nombreuses situations, vous devrez éventuellement réaliser des études conçues pour tester correctement divers aspects des performances (par exemple, la généralisation aux données acquises ultérieurement). Néanmoins, j’insisterais pour que le processus de modélisation complet soit signalé et que les implications de ces modifications tardives fassent l’objet d’une discussion approfondie.

En outre, une agrégation incluant et une estimation de la performance du CV analogique en sortie de sac serait possible à partir des résultats déjà disponibles - qui est l'autre type de "post-traitement" du modèle que je serais prêt à considérer comme inoffensif ici. Encore une fois, il aurait été préférable que l’étude soit conçue dès le départ pour vérifier que l’agrégation ne présente aucun avantage par rapport aux prédictions individuelles (ce qui est une autre façon de dire que les modèles individuels sont stables).


Mise à jour (2019): plus je pense à ces situations, plus je privilégie l' approche de la "validation croisée imbriquée apparemment sans imbrication" .

cbéléites
la source
Si le classificateur est instable, faut-il choisir celui dont la performance médiane est la meilleure? Ce choix serait analogue à votre suggestion de comparer les performances internes aux performances externes.
viyps
2
@davips: Si les modèles sont instables, l'optimisation ne fonctionnera pas (l'instabilité entraîne une variance supplémentaire). Le choix d’un modèle avec une performance médiane (ou moyenne) n’aidera cependant pas. Au lieu de cela, si les modèles sont instables, je recommanderais soit de choisir des modèles plus restrictifs (par exemple une régularisation plus forte), soit de construire un ensemble de modèles (ce qui est fondamentalement différent du choix d’un modèle).
cbeleites
1
@ user99889: veuillez voir la réponse mise à jour.
cbeleites
1
@ user99889: oui, mais ne vous attendez pas à des miracles. Si la stabilité est un problème lorsque vous vous entraînez dans 80% des cas (k = 5), il le sera probablement encore avec k = 10, c’est-à-dire 90% de n = 12,5% supplémentaires par rapport aux modèles à substitution 80% / k = 5.
cbeleites
1
@cbeleites: un hypothétique associé. Supposons que je décide de rechercher un espace de paramètres c: [1,2,3]. J'effectue un CV imbriqué sur l'ensemble de mes données et trouve que la performance n'est pas terrible. J'élargis donc mon espace de recherche à c: [0.5,1,1.5,2,2.5,3,3,5,4]. Ai-je fait quelque chose de très mauvais? Il semble que j'ai essentiellement changé mon espace de paramètres (qui fait partie du processus de modélisation) sur la base des connaissances acquises à partir des données de test, et que je devrais donc évaluer sur un jeu de données externe à mon jeu de données actuel? Heureux d'en faire une question distincte si vous pensez que c'est mieux.
utilisateur0
27

Outre l'excellente réponse des cébéléites (+1), l'idée de base est que la validation croisée est utilisée pour évaluer les performances d'une méthode d'adaptation d'un modèle, et non du modèle lui-même. Si vous devez effectuer une sélection de modèle, vous devez l’effectuer indépendamment dans chaque étape de la procédure de validation croisée, car elle fait partie intégrante de la procédure d’ajustement de modèle. Si vous utilisez une procédure de sélection de modèle basée sur la validation croisée, cela signifie que vous obtenez une validation croisée imbriquée. Il est utile d’examiner le but de chaque validation croisée: l’un concerne la sélection du modèle, l’autre, l’estimation des performances.

Je ferais mon modèle final en ajustant le modèle (y compris la sélection du modèle) à l'ensemble de données, après avoir utilisé la validation croisée imbriquée pour avoir une idée des performances que je pouvais raisonnablement attendre de ce modèle.

Dikran Marsupial
la source
1
Pourquoi avez-vous besoin get an idea of the performance?
viyps
1
@davips Généralement, si une méthode statistique doit être utilisée à des fins pratiques, les utilisateurs voudront souvent avoir une idée de son fonctionnement (par exemple, un test de dépistage médical). De même, si vous développez un algorithme d’apprentissage automatique, il est utile de disposer d’une estimation non biaisée de ses performances par rapport aux méthodes concurrentes. C'est également un moyen utile de valider si la méthode fonctionne réellement (ce qui est invalidé si la validation croisée est utilisée à la fois pour sélectionner des paramètres et pour estimer les performances).
Dikran Marsupial
5
Donc, pour décider du paramètre à utiliser dans le modèle final, vous feriez la boucle intérieure une fois? Donc, si la boucle interne était une validation 10 fois, vous auriez besoin de 1/10 du train de données, chaque modèle le répète 10 fois, puis choisissez la valeur du paramètre avec la plus petite erreur moyenne? Puis réentraînez le modèle avec cette valeur de paramètre sur l'ensemble de données?
emschorsch
2
Oui c'est correct. r
Dikran Marsupial
1
@FedericoTedeschi Les validations croisées doivent être imbriquées plutôt que simplement une scission différente afin d'obtenir un estimateur de performance non biaisé (voir la section 5.3 de mon article jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ). . En général, je n'utilise LOOCV que pour la sélection de modèle pour les modèles où il peut être calculé efficacement et utiliserais l'amorçage / ensachage pour les modèles de petits ensembles de données (l'erreur OOB remplaçant la validation croisée externe).
Dikran Marsupial
7

Je pense que personne n'a vraiment répondu à la première question. Par "validation croisée imbriquée", je pense qu'il voulait dire le combiner avec GridSearch. Généralement, GridSearch a un CV intégré et prend un paramètre sur le nombre de plis que nous souhaitons tester. Combiner ces deux méthodes est une bonne pratique, mais les modèles de GridSearch et CrossValidation ne sont pas votre modèle final. Vous devriez choisir les meilleurs paramètres et former éventuellement un nouveau modèle avec toutes vos données, ou même faire une CrossValidation ici aussi sur des données invisibles. Si le modèle est vraiment bon, vous le formerez sur toutes vos données. C'est ton dernier modèle.

Anselal
la source
3
pour clarifier, dans python scikit-learn, GridSearchCV(refit=True)réajuste réellement un modèle sur les données FULL en utilisant les meilleurs paramètres, de sorte qu’une étape supplémentaire n’est pas nécessaire. Voir docs
Paul
Vous avez raison sur l'option de refit. Je disais simplement que c'était évident !!
Anselal
"le modèle de GridSearch n'est pas votre modèle final". Mais je pense que le modèle de recherche sur la grille avec refit = True est le modèle final. Voulez-vous dire que vous et moi sommes sur la même page? Mais dans ce cas, je ne vois toujours pas où se niche la recherche dans la grille avec CV. Cela me semble être une couche unique de CV (par exemple, une recherche sur 5 dans une grille est une couche de CV).
Paul
Nous sommes sur la même page à propos de la refit. Mais avec CV imbriqué, cela signifie que vous créez une autre boucle de CV en dehors de GridSearch, en laissant quelques données en dehors de la formation et en testant votre modèle final-final pour voir s'il se généralise (fait de bonnes prédictions sur des données inconnues)
anselal