Le réglage d'hyperparamètre sur un échantillon de jeu de données est-il une mauvaise idée?

19

J'ai un ensemble de données de 140000 exemples et 30 fonctionnalités pour lesquelles je forme plusieurs classificateurs pour une classification binaire (SVM, régression logistique, forêt aléatoire, etc.)

Dans de nombreux cas, le réglage hyperparamétrique de l'ensemble de données à l'aide de la recherche par grille ou aléatoire est trop coûteux en temps.

J'ai commencé à utiliser la technique suivante

  • Sous-échantillon de mon jeu de données
  • Utilisez la fraction obtenue pour régler les hyperparamètres sur
  • Utilisez les paramètres obtenus pour former un modèle en utilisant l'ensemble de données entier

Pour évaluer chaque ensemble de paramètres à la deuxième étape, j'utilise sklearn's GridSearchCVavec cv = 10. Pour évaluer le modèle final que je crée à la troisième étape, j'utilise celui sklearnde cross_val_predict. Dans ce sens, j'évalue mes modèles en laissant 10% pour cent des données, je m'entraîne sur le reste et mesure la précision prédictive sur les 10%, de manière itérative 10 fois, puis en prenant la moyenne des scores.

Ce qui m'a inquiété, c'est que la précision des prédictions que j'obtiens en m'entraînant sur l'ensemble de mes données, est vraiment proche de l'évaluation que j'obtiens lors du réglage des paramètres pour le meilleur ensemble de paramètres (chaque ensemble de paramètres testé génère un score obtenu à partir de la moyenne de 10- résultats de validation croisée).

La plupart du temps, la précision cross_val_predictmesurée à l'aide de tous les exemples d'apprentissage (ensemble de données entier) est un peu supérieure à ce que l'évaluation des meilleurs paramètres a renvoyé.

Pour illustrer cela, voici l'évaluation d'un ensemble de paramètres (sur un ensemble de données plus petit que ce que j'ai décrit ci-dessus mais l'effet est le même)

Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...

Et voici les scores moyens (de cross_val_predict) que j'ai obtenus de la formation sur l'ensemble de mes données en utilisant les meilleurs paramètres

precision    recall  f1-score   support

      0       0.86      0.85      0.86     15417
      1       0.86      0.87      0.87     16561

avg / total       0.86      0.86      0.86     31978

acc score: 0.863750078179
roc au score: 0.863370490059
[[13147  2270]
 [ 2087 14474]]

Comme vous pouvez le voir, la formation sur l'ensemble de données améliore les résultats. J'ai également validé qu'un modèle mal réglé (par exemple en utilisant les valeurs par défaut ou des valeurs aléatoires pour Cet gamma) conduit à une précision de prédiction bien pire.

Dans l'ensemble, je pense que le réglage des hyperparamètres sur un sous-ensemble n'est pas idéal mais peut potentiellement conduire à des résultats relativement bons sans avoir à attendre trop longtemps. Par exemple, avant d'utiliser cette approche, j'ai utilisé le optunitypackage pour régler l'hyperparamètre sur l'ensemble de données. Cette procédure prendrait de 3 à 5 jours et produirait des résultats qui avaient soit une très bonne précision, soit un très bon rappel, mais pas les deux. classificateurs avaient atteint) la mesure f1 était vraiment faible. Au contraire, l'utilisation de l'approche tardive conduit à quelques heures de formation et à une meilleure mesure f1.

Mes préoccupations sont les suivantes:

Dois-je limiter la précision de ma classification? Dois-je éviter d'utiliser toute la puissance de prédiction que mon ensemble de données peut offrir en optimisant uniquement sur un sous-ensemble? Si un tel préjudice de performance se produit, est-il en quelque sorte limité par un facteur?

LetsPlayYahtzee
la source
Veuillez clarifier les deux méthodes qui conduisent à la précision de prédiction rapprochée. Divisez-vous les données en ensemble d'apprentissage et ensemble de validation, où l'ensemble de validation est utilisé uniquement pour optimiser les hyper-paramètres, et non pour la formation?
Iliyan Bobev
Voir ma question mise à jour. J'espère que c'est plus clair maintenant.
LetsPlayYahtzee

Réponses:

15

En plus de la réponse de Jim (+1): Pour certains classificateurs, les valeurs d'hyper-paramètre dépendent du nombre d'exemples d'apprentissage, par exemple pour un SVM linéaire, le problème d'optimisation primaire est

mjen12w2+Cje=1ξje

sujet à

yje(Xjewb)1-ξje,unenξje0je

Notez que le problème d'optimisation est fondamentalement une mesure du terme de inadéquation des données (la sommation sur ) et un terme de régularisation, mais le paramètre de regrularisation habituel est placé avec le terme de inadéquation des données. De toute évidence, plus nous avons de modèles d'entraînement, plus la somme sera grande et plus le devrait être petit pour maintenir le même équilibre avec l'ampleur des poids.ξjeC

Certaines implémentations du SVM reparameterise comme

mjen12w2+Cje=1ξje

afin de compenser, mais certains ne le font pas. Donc, un point supplémentaire à considérer est de savoir si les hyper-paramètres optimaux dépendent du nombre d'exemples de formation ou non.

Je suis d'accord avec Jim que le sur-ajustement du critère de sélection du modèle est probablement plus problématique, mais si vous avez suffisamment de données, même dans le sous-échantillon, cela peut ne pas être un problème substantiel.

Dikran Marsupial
la source
11

Le réglage d'hyperparamètre sur un échantillon de jeu de données est-il une mauvaise idée?

R: Oui, car vous risquez de sur-ajuster (les hyperparamètres) sur cet ensemble de test spécifique résultant de la répartition des tests de train choisie.

Dois-je limiter la précision de ma classification?

R: Oui, mais la sagesse courante de l'apprentissage automatique est: avec vos hyperparamètres optimaux, par exemple , réaménagez votre (vos) modèle (s) sur l'ensemble de données et faites de ce modèle votre modèle final pour les nouveaux cas invisibles à venir.λ

Dois-je éviter d'utiliser toute la puissance de prédiction que mon ensemble de données peut offrir en optimisant uniquement sur un sous-ensemble?

R: voir la réponse précédente.

Si un tel préjudice de performance se produit, est-il en quelque sorte limité par un facteur?

A: idem.

Je mesure ma précision en utilisant la croix 10 fois que j'utilise pour évaluer également les paramètres

R: Notez que cela est différent de ce qui est demandé dans le titre. Le CV multiplié par 10 parcourt plus de 10 divisions de train d'essai pour arriver à une estimation "non biaisée" (moins biaisée) de la généralisabilité (mesurée dans ce cas par la précision). Un CV multiplié par 10 répond exactement au problème dont je parle dans la première réponse.

la précision des prévisions que j'obtiens en m'entraînant sur l'ensemble de mes données

R: il s'agit d'une mesure "dans l'échantillon" qui pourrait être biaisée de manière optimiste. Mais n'oubliez pas que vous avez de nombreux cas et relativement peu de fonctionnalités, de sorte que ce biais d'optimisme peut ne pas être un problème. Pépite d'apprentissage automatique: "le meilleur régularisateur est plus de données."

[suite], est toujours très proche de l'évaluation que j'obtiens lors du réglage des paramètres pour le meilleur ensemble de paramètres.

R: voir la réponse précédente. Regardez les graphiques hyperparamétriques: le réglage diminue-t-il l'erreur et de combien? D'après ce que vous dites, le réglage ne fait pas grand-chose.

Vous pouvez tester cela comme suit. Faites une répartition de 70% à 30% des tests de train. Comparez les performances prédictives de:

  1. un modèle non accordé formé sur le train,
  2. un modèle réglé 10 fois CV formé sur le train.

Laissez les deux modèles prédire l'ensemble de test. Si les performances sont très proches, le réglage ne fait pas grand-chose. Si les performances sont différentes en faveur du modèle réglé, continuez alors avec l'approche de réglage.

Jim
la source
1

Je répondrai pour les réseaux de neurones artificiels (RNA).

Les hyperparamètres des RNA peuvent définir soit son processus d'apprentissage (par exemple, le taux d'apprentissage ou la taille du mini-lot) ou son architecture (par exemple, le nombre d'unités ou de couches cachées).

Ajuster les hyperparamètres architecturaux sur un sous-ensemble de votre ensemble d'entraînement n'est probablement pas une bonne idée (à moins que votre ensemble d'entraînement manque vraiment de diversité, c'est-à-dire que l'augmentation de la taille de l'ensemble d'entraînement n'augmente pas les performances de l'ANN), car les hyperparamètres architecturaux modifient la capacité de l'ANN.

Je serais moins concerné par le réglage des hyperparamètres qui définissent le processus d'apprentissage sur un sous-ensemble de votre ensemble d'entraînement, mais je suppose que l'on devrait le valider empiriquement.

Franck Dernoncourt
la source
0

Vous pouvez utiliser des algorithmes d'optimisation d'hyperparamètre qui prennent en charge les évaluations multifidélités, c'est-à-dire les évaluations sur des sous-ensembles de vos données afin d'obtenir une estimation approximative mais utile des valeurs d'hyperparamètre optimales pour l'ensemble de données entier. De telles approches permettent généralement de réduire le coût de calcul total nécessaire pour exécuter l'optimisation hyperparamétrique.

IndieSolver
la source