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 GridSearchCV
avec cv = 10. Pour évaluer le modèle final que je crée à la troisième étape, j'utilise celui sklearn
de 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_predict
mesuré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 C
et 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 optunity
package 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?
la source
Réponses:
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
sujet à
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.ξje C
Certaines implémentations du SVM reparameterise comme
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.
la source
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.
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.λ∗
R: voir la réponse précédente.
A: idem.
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.
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."
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:
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.
la source
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.
la source
Cet article traite du sujet de la prise d'autres jeux de données / plus petits pour le réglage de jeux de données plus grands: https://papers.nips.cc/paper/5086-multi-task-bayesian-optimization.pdf
Je pense que ce n'est pas une mauvaise idée contrairement à ce que Jim a dit .
la source
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.
la source
Vous pouvez jeter un œil à https://link.springer.com/chapter/10.1007/978-3-319-53480-0_27 dans lequel nous avons étudié les effets de l'échantillonnage aléatoire sur le réglage hyperparamétrique SVM à l'aide de 100 real- jeux de données mondiaux ...
la source