Pour compléter les réponses précédentes, nous commencerons par le début:
Il existe peu de façons d'adapter vos modèles aux données d'entraînement, certaines sont évidentes, d'autres moins. Premièrement, et le plus important est le sur-ajustement des paramètres d'apprentissage (poids) aux données (paramètres d'ajustement de courbe en régression logistique, poids de réseau en réseau neuronal, etc.). Ensuite, vous modéliseriez le bruit dans les données - si vous surajustement, vous capturez non seulement la fonction de génération sous-jacente, mais aussi le caractère aléatoire en raison de la taille de l'échantillon et du fait que l'échantillon n'est pas une représentation parfaite de la population. Ce surajustement peut être dans une certaine mesure atténué en pénalisant certains attributs (en général la complexité) du modèle. Cela peut être fait en arrêtant la formation une fois que les performances sur l'échantillon de train ne s'améliorent plus de manière significative, en supprimant certains neurones d'un réseau de neurones (appelé abandon),https://ieeexplore.ieee.org/document/614177/ ) etc.). Cependant ces stratégies de régularisation sont elles-mêmes paramétrisées (quand arrêtez-vous?, Combien de neurones à retirer? Etc.). De plus, la plupart des modèles d'apprentissage automatique ont un certain nombre d'hyper-paramètres qui doivent être définis avant le début de la formation. Et ces hyper-paramètres sont réglés dans la phase de réglage des paramètres.
Cela nous amène au deuxième type de sur-ajustement, plus subtil: le sur-ajustement hyperparamétrique. La validation croisée peut être utilisée pour trouver les "meilleurs" hyper-paramètres, en entraînant à plusieurs reprises votre modèle à partir de zéro sur k-1 plis de l'échantillon et en testant sur le dernier pli.
Alors, comment cela se fait-il exactement? Selon la stratégie de recherche (donnée par tenshi), vous définissez des hyper-paramètres du modèle et entraînez votre modèle k fois, à chaque fois en utilisant un test de pli différent. Vous vous «souvenez» des performances moyennes du modèle sur tous les plis de test et répétez la procédure entière pour un autre ensemble d'hyper-paramètres. Ensuite, vous choisissez un ensemble d'hyper-paramètres qui correspond aux meilleures performances lors de la validation croisée. Comme vous pouvez le voir, le coût de calcul de cette procédure dépend fortement du nombre d'ensembles d'hyper-paramètres à prendre en compte. C'est pourquoi certaines stratégies pour choisir cet ensemble ont été développées (ici je vais généraliser ce que tenshi a dit):
- Recherche de grille: pour chaque hyper-paramètre, vous énumérez un nombre fini de valeurs possibles. Ensuite, la procédure est effectuée de manière exhaustive pour toutes les combinaisons d'hyper-paramètres énumérés. Évidemment, si vous avez des hyper-paramètres continus, vous ne pouvez pas tous les essayer.
- Recherche de grille aléatoire: similaire à la recherche de grille normale, mais cette fois, vous n'essayez pas toutes les combinaisons de manière exhaustive, mais échantillonnez plutôt un nombre fixe de fois pour toutes les valeurs possibles. Notez qu'ici, il est possible non seulement d'énumérer les valeurs possibles pour un hyper-paramètre, mais vous pouvez également fournir une distribution à partir de laquelle échantillonner.
- BayesianSearch - la combinaison de valeurs d'hyper-paramètre est choisie pour maximiser l'amélioration attendue du score. Pour en savoir plus: http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf . Et une bibliothèque qui ne traite que de cela: https://github.com/hyperopt/hyperopt . Comme il n'est pas aussi facile de combiner avec sklearn que ce que tenshi a recommandé, utilisez-le uniquement si vous ne travaillez pas avec sklearn.
- Autres moyens de recherche guidée dans l'espace hyperparamétrique. D'après mon expérience, ils sont rarement utilisés, donc je ne les couvrirai pas ici.
Cependant, ce n'est pas la fin de l'histoire, car les hyperparamètres peuvent (et vont) également surcharger les données. Dans la plupart des cas, vous pouvez simplement vivre avec, mais si vous souhaitez maximiser la puissance de généralisation de votre modèle, vous pouvez également essayer de régulariser les hyper-paramètres. Tout d'abord, vous pouvez mieux évaluer les performances des données hors échantillon en utilisant la recherche de grille imbriquée (détails: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html , discussion: validation croisée imbriquée pour la sélection du modèle), ou utilisez simplement un ensemble de validation qui n'est pas utilisé pour le réglage d'hyper-paramètre. Quant à la régularisation dans l'espace hyperparamétrique, c'est une question plus ou moins ouverte. Certaines idées consistent à choisir non pas le meilleur ensemble de valeurs d'hyper-paramètre, mais quelque chose de plus proche du milieu; le raisonnement est le suivant: les meilleures valeurs d'hyper-paramètre surestiment très probablement les données simplement parce qu'elles fonctionnent mieux que les autres données du train, les mauvais paramètres sont tout simplement mauvais, mais ceux du milieu peuvent éventuellement obtenir une meilleure généralisation que les meilleurs . Andrew Ng a écrit un article à ce sujet. Une autre option consiste à limiter votre espace de recherche (vous régularisez en introduisant ici un biais fort - les valeurs en dehors de l'espace de recherche ne seront jamais sélectionnées de manière évidente).
Remarque secondaire: l'utilisation de la précision comme métrique de performance est dans la plupart des cas une très mauvaise idée, examinez les scores f1 et f_beta - ces métriques refléteront dans la plupart des cas mieux ce que vous essayez réellement d'optimiser dans les problèmes de classification binaire.
Pour résumer: la validation croisée en elle-même est utilisée pour évaluer les performances du modèle sur des données hors échantillon, mais peut également être utilisée pour régler les hyper-paramètres en conjonction avec l'une des stratégies de recherche dans l'espace des hyper-paramètres. Trouver de bons hyper-paramètres permet d'éviter ou du moins de réduire le sur-ajustement, mais gardez à l'esprit que les hyper-paramètres peuvent également surcharger les données.