Faut-il toujours faire du CV?

9

Ma question: dois-je faire du CV même pour un ensemble de données relativement volumineux?

J'ai un ensemble de données relativement volumineux et j'appliquerai un algorithme d'apprentissage automatique à l'ensemble de données.

Comme mon PC n'est pas rapide, le CV (et la recherche dans la grille) prend parfois trop de temps. En particulier, un SVM ne se termine jamais en raison de nombreux paramètres de réglage. Donc, si je fais un CV, je dois choisir des données relativement petites.

D'un autre côté, l'ensemble de validation doit également être volumineux, donc je pense que c'est une bonne idée d'utiliser un ensemble de validation qui a la même taille (ou plus) que l'ensemble d'entraînement. (À savoir au lieu de CV, j'utilise un grand ensemble de validation pour le réglage des paramètres.)

J'ai donc maintenant au moins deux options.

  1. faire CV sur un petit ensemble de données.
  2. utiliser un ensemble de formation relativement grand et un ensemble de validation sans CV.
  3. autre idée.

Quelle est la meilleure idée? Les avis théoriques ou pratiques sont les bienvenus.

H. Shindoh
la source
1
Cette question devrait évidemment être une CW.
H. Shindoh
1
Qu'est-ce qui est grand? Combien d'observations? Combien de fonctionnalités / variables / régresseurs?
Jim
1
Cela dépend d'un PC. A savoir je ne pense pas aux "big data", qui nécessitent plusieurs ordinateurs.
H. Shindoh

Réponses:

3

En général, vous n'avez pas besoin d'utiliser la validation croisée tout le temps. Le but du CV est d'obtenir une estimation plus stable de la généralisation de votre classificateur que vous obtiendriez en utilisant un seul ensemble de tests. Vous n'avez pas besoin d'utiliser CV si votre ensemble de données est énorme, donc l'ajout de données à votre ensemble d'entraînement n'améliorera pas beaucoup votre modèle, et quelques erreurs de classification dans votre ensemble de test juste par hasard, ne changeront pas vraiment votre mesure de performance .

En ayant un petit ensemble d'entraînement et un grand ensemble de tests, votre estimation sera biaisée. Donc, ce sera probablement pire que ce que vous obtiendriez en utilisant plus de données d'entraînement et des hyperparamètres optimaux que vous pourriez trouver différents pour un ensemble de données plus important, simplement parce que plus de données nécessiteront moins de régularisation.

Cependant, l'obtention d'hyperparamètres optimaux n'est pas la partie importante de toute façon et cela n'améliorera pas considérablement les performances. Vous devez concentrer votre énergie pour comprendre le problème, créer de bonnes fonctionnalités et remettre les données en forme.

Voici quelques éléments que vous pouvez envisager pour accélérer les choses:

  1. Entraînez-le avec moins de fonctionnalités. Utilisez la sélection des fonctionnalités et / ou la réduction de dimensionnalité pour réduire la taille de votre problème
  2. Utiliser un noyau précaché pour SVM
  3. Utilisez des algorithmes qui n'ont pas besoin de sélectionner d'hyper paramètres dans une grille. Particulièrement linéaires comme la régression logistique avec la crête / lasso / pénalité nette élastique ou même SVM linéaire. Selon l'implémentation, ces classificateurs peuvent adapter des modèles pour tous les hyperparamètres dans le chemin sélectionné pour le coût de montage d'un seul
  4. utiliser une implémentation plus rapide pour votre type de problème (vous devrez le rechercher sur Google)

et même avec un ordinateur plus lent, vous pouvez:

  1. Utilisez plus de cœurs
  2. Utiliser le GPU
rep_ho
la source
2

La validation croisée est un outil pour estimer la variance de votre métrique de performance en raison du caractère aléatoire des données (et peut-être dans l'algorithme d'apprentissage s'il n'est pas déterministe).

Donc, si vous n'utilisez qu'un seul fractionnement, par exemple 80% de train + 20% de test et rapportez votre métrique de performance à partir de cette seule expérience, il y a de fortes chances que quiconque essaie de reproduire votre expérience en utilisant exactement les mêmes paramètres trouvera une performance différente (parfois très différent). À moins bien sûr que vous ne fournissiez la même répartition exacte qui n'a aucun sens.

Pour revenir à votre question, je pense que vous devriez certainement utiliser CV pour signaler votre performance (par exemple, faire un CV de 10 fois et rapporter la moyenne et l'écart-type de la métrique de performance). Maintenant, pour ajuster votre algorithme, vous pouvez utiliser un ensemble de validation beaucoup plus petit échantillonné à partir de l'ensemble d'apprentissage (assurez-vous qu'il n'est pas inclus dans l'ensemble de test).

Si vous avez peur de ne pas trouver les meilleurs hyperparamètres à l'aide d'un petit ensemble, vous surestimez probablement votre algorithme aux spécificités de l'ensemble de données. Si vous ne pouvez pas trouver une configuration utilisant un petit échantillon qui donne une performance raisonnable parmi tous les plis, l'algorithme n'est probablement pas très utile dans la pratique.

Gardez également à l'esprit que certains algorithmes sont tout simplement trop lents / ne s'adaptent pas bien dans certaines configurations. Cela fait également partie de la sélection de modèles pratiques.

Étant donné que vous mentionnez les SVM, la plupart des implémentations seront bien sûr lentes lors de la recherche de paramètres pour les noyaux non linéaires par recherche de grille. La recherche de grille a une complexité exponentielle, alors utilisez-la avec très peu de paramètres. Gardez également à l'esprit que la plupart des bibliothèques fournissent des paramètres par défaut raisonnables (ou au moins vous définissez un paramètre et il existe des heuristiques pour définir les autres).

oDDsKooL
la source