CrossValidated contient de nombreuses discussions sur la sélection de modèles et la validation croisée. Voici quelques-uns:
- Validation croisée interne et externe et sélection du modèle
- La réponse de @ DikranMarsupial à la sélection des fonctionnalités et à la validation croisée
Cependant, les réponses à ces discussions sont assez génériques et soulignent principalement les problèmes liés aux approches particulières en matière de validation croisée et de sélection de modèle.
Pour rendre les choses aussi concrètes que possible , disons par exemple que nous travaillons avec un SVM avec un noyau RBF: , et que J'ai un jeu de données d'entités X et d'étiquettes y , et que je veux
- Trouver les meilleures valeurs possibles de mon modèle ( et )
- Former le SVM avec mon jeu de données (pour le déploiement final)
- Estimer l'erreur de généralisation et l'incertitude (variance) autour de cette erreur
Pour ce faire, je voudrais personnellement faire une recherche sur la grille, par exemple, j'essaie toutes les combinaisons possibles de et . Pour simplifier, on peut supposer les plages suivantes:
Plus précisément, en utilisant mon ensemble de données complet, je procède comme suit:
- Pour chaque paire ( , ), j'effectue des itérations répétées (par exemple 100 répétitions aléatoires) de validation croisée de pli (par exemple ) sur mon jeu de données, c'est-à-dire que je forme mon SVM sur plis de et évalue la erreur sur le pli gauche, itérant à travers tous les plis. Globalement, je collecte 100 x 10 = 1000 erreurs de test.
- Pour chacune de ces paires ( , ), je calcule la moyenne et la variance de ces 1000 erreurs de test .
Maintenant, je veux choisir le meilleur modèle (les meilleurs paramètres de noyau) que je voudrais utiliser pour former mon SVM final sur l'ensemble de données. D'après ce que je comprends, choisir le modèle qui présente la moyenne d'erreur la plus faible et la variance et serait le bon choix, et que les are ce modèle sont mes meilleures estimations du biais d'erreur et de la variance de généralisation du modèle lors de la formation avec l'ensemble de données complet.
MAIS, après avoir lu les réponses dans les discussions ci-dessus, j’ai l’impression que cette méthode pour choisir le meilleur SVM pour le déploiement et / ou pour estimer son erreur (performances de généralisation) est imparfaite et qu’il existe de meilleurs moyens de choisir le SVM. meilleur SVM et signaler son erreur. Si c'est vrai, que sont-ils? Je cherche une réponse concrète s'il vous plaît.
En ce qui concerne ce problème, comment puis-je choisir le meilleur modèle et évaluer correctement son erreur de généralisation ?
la source
Réponses:
Mon article dans JMLR aborde cette question précise et montre pourquoi la procédure suggérée dans la question (ou au moins une très similaire) entraîne des estimations de performance biaisées de manière optimiste:
Gavin C. Cawley, Nicola LC Talbot, "Sur-ajustement dans la sélection de modèles et biais de sélection ultérieurs dans l'évaluation de performances", Journal of Machine Learning Research, 11 (Jul): 2079-2107, 2010. ( www )
L'essentiel à retenir est que la validation croisée est une technique permettant d'estimer les performances de généralisation d'une méthode de génération de modèle plutôt que du modèle lui-même. Par conséquent, si la sélection des paramètres du noyau fait partie du processus de génération du modèle, vous devez également procéder à une validation croisée du processus de sélection du modèle. Dans le cas contraire, vous obtiendrez une estimation de performance biaisée de manière optimiste (comme cela sera le cas avec la procédure que vous proposez).
Supposons que vous ayez une fonction fit_model, qui prend en charge un ensemble de données composé d'attributs X et de réponses souhaitées Y, et qui renvoie le modèle ajusté pour cet ensemble de données, y compris le réglage des hyper-paramètres (dans ce cas, les paramètres de noyau et de régularisation). Cet ajustement des hyper-paramètres peut être effectué de nombreuses manières, par exemple en minimisant l'erreur de validation croisée sur X et T.
Étape 1 - Ajustez le modèle à toutes les données disponibles à l’aide de la fonction fit_model. Cela vous donne le modèle que vous utiliserez en fonctionnement.
Étape 2 - Évaluation du rendement. Effectuez des validations croisées répétées en utilisant toutes les données disponibles. Dans chaque pli, les données sont partitionnées en un ensemble d'apprentissage et un ensemble de test. Ajustez le modèle à l'aide du jeu d'apprentissage (enregistrez les valeurs d'hyper-paramètre pour le modèle ajusté) et évaluez les performances du jeu de test. Utilisez la moyenne de tous les ensembles de tests comme estimation de la performance (et examinez peut-être également la dispersion des valeurs).
Étape 3 - Variabilité des paramètres d’hyper-paramètres - effectuez une analyse des valeurs d’hyper-paramètres collectées à l’étape 3. Cependant, il convient de souligner qu’il n’ya rien de spécial à propos des hyper-paramètres, ce sont juste des paramètres du modèle qui ont été estimés (indirectement). ) à partir des données. Ils sont traités comme des hyper-paramètres plutôt que comme paramètres pour des raisons de commodité de calcul / mathématiques, mais cela n’est pas nécessairement le cas.
Le problème de l’utilisation de la validation croisée ici est que les données d’apprentissage et de test ne sont pas des échantillons indépendants (car elles partagent des données), ce qui signifie que l’estimation de la variance de l’estimation de la performance et des hyper-paramètres risque d’être biaisée (c.-à-d. plus petit que ce ne serait le cas pour des échantillons de données réellement indépendants dans chaque repli). Plutôt que de procéder à une validation croisée répétée, j'utiliserais probablement plutôt bootstrap et capturer les modèles résultants si cela était réalisable sur le plan du calcul.
Le point clé est que pour obtenir une estimation de performance non biaisée, quelle que soit la procédure utilisée pour générer le modèle final (fit_model), elle doit être répétée dans son intégralité indépendamment dans chaque étape de la procédure de validation croisée.
la source
rather than repeated cross-validation you would go for bootstrapping
- Quelle est exactement la différence? Les deux impliquent de multiples répétitions de diviser les données entrain
ettest
et de la formation puis danstrain
et à l' évaluation danstest
, non?L'utilisation d'un SVM avec des hyperparamètres fixes ( et ) est un algorithme d'apprentissage automatique.γ C
Une procédure qui optimise ces hyperparamètres et forme un SVM avec ceux - ci est également un simple algorithme d'apprentissage automatique . Au lieu d'optimiser uniquement les paramètres internes du SVM (les vecteurs de support), il optimise également les hyperparamètres.
Maintenant, vous avez deux problèmes [qui peuvent être résolus indépendamment]:
Comment effectuer l'optimisation de l'hyperparamètre / la sélection du modèle?
Comment estimer l'erreur de généralisation d'un algorithme d'apprentissage automatique?
Lisez Mauvaise utilisation de la validation croisée (performances de rapport pour la meilleure valeur d'hyperparamètre) pour vous assurer de ne pas les mélanger.
Une solution spécifique (probablement pas optimale) au problème concret de votre question:
Ici, ce
model
serait votre "meilleur modèle" etloss_CV
une "estimation correcte de son erreur de généralisation" (bien que biaisé à la hausse, mais vous ne pouvez pas avoir le gâteau et le manger aussi).la source