Comment la sélection des fonctionnalités et l'optimisation des hyperparamètres doivent-elles être ordonnées dans le pipeline d'apprentissage automatique?

14

Mon objectif est de classer les signaux des capteurs. Le concept de ma solution jusqu'à présent est le suivant: i) fonctionnalités d'ingénierie à partir d'un signal brut ii) sélection des fonctionnalités pertinentes avec ReliefF et une approche de clustering iii) application de NN, Random Forest et SVM

Cependant, je suis pris au piège d'un dilemme. En ii) et iii), il existe des hyperparamètres comme k-Nearest Neigbours for ReliefF ou la longueur de la fenêtre, pour laquelle le signal du capteur est évalué, ou le nombre d'unités cachées dans chaque couche de NN

Il y a 3 problèmes que je vois ici: 1) Le réglage des paramètres de sélection des fonctionnalités influencera les performances du classificateur 2) L'optimisation des hyperparamètres du classificateur influencera le choix des fonctionnalités. 3) L'évaluation de chaque combinaison possible de configuration est intraitable.

Mes questions sont donc les suivantes: a) Puis-je faire une hypothèse simplificatrice, les paramètres de sélection de la fonction de réglage st peuvent être découplés des paramètres du classificateur de réglage? b) Y a-t-il d'autres solutions possibles?

Grunwalski
la source
Je pense que le découplage du réglage de la sélection des fonctionnalités et du réglage du classificateur est valide, car l'heuritsic pour reliefF vise à maximiser la variance inter-classe et à minimiser la variance intra-classe, ce qui indique également un bon classificateur. Par conséquent, le réglage des paramètres optimaux pour reliefF rend également un bon classificateur plus «probable». Cependant, avoir une formulation mathématique pour appuyer cette idée serait très bien.
Grunwalski
Une variante spécifique de cette question: la sélection des fonctionnalités doit-elle faire partie de la routine de validation croisée (comme dans: # pour chaque ensemble d'hyperparam de classifère: # pour chaque exécution de CV k-fold: 1) sélection de fonctionnalité, 2) mise à l'échelle des fonctionnalités, 3) ajustement du classificateur 4) prédire sur l'ensemble de test?
Nikolas Rieble
1
@NikolasRieble Je viens d'écrire une réponse à la question d'origine et j'ai également inclus votre question dans la réponse
Dennis Soemers

Réponses:

14

Comme vous l'avez déjà observé vous-même, votre choix de fonctionnalités (sélection de fonctionnalités) peut avoir un impact sur les hyperparamètres de votre algorithme qui sont optimaux, et les hyperparamètres que vous sélectionnez pour votre algorithme peuvent avoir un impact sur le choix de fonctionnalités qui serait optimal.

Donc, oui, si vous vous souciez vraiment de réduire chaque pourcentage de performances de votre modèle et que vous pouvez vous permettre la quantité de calcul requise, la meilleure solution est probablement de sélectionner les fonctionnalités et de régler les hyperparamètres "en même temps". Ce n'est probablement pas facile (selon la façon dont vous sélectionnez la fonctionnalité). La façon dont j'imagine que cela fonctionnerait serait d'avoir différents ensembles de fonctionnalités en tant que candidats et de traiter la sélection d'un ensemble de fonctionnalités parmi tous ces ensembles de candidats comme un hyperparamètre supplémentaire.

En pratique, cela n'est peut-être pas vraiment réalisable. En général, si vous ne pouvez pas vous permettre d'évaluer toutes les combinaisons possibles, je recommanderais:

  1. Optimisez de manière très lâche les hyperparamètres, juste pour vous assurer de ne pas attribuer de valeurs extrêmement mauvaises à certains hyperparamètres. Cela peut souvent être fait à la main si vous avez une bonne compréhension intuitive de vos hyperparamètres, ou effectué avec une procédure d'optimisation d'hyperparamètres très brève en utilisant juste un tas de fonctionnalités que vous savez être décemment bonnes sinon.

  2. Sélection de fonctionnalités, avec des hyperparamètres qui ne sont peut-être pas optimisés à 100% mais qui ne sont pas non plus extrêmement terribles. Si vous avez déjà au moins un algorithme d'apprentissage machine quelque peu décemment configuré, avoir de bonnes fonctionnalités sera beaucoup plus important pour vos performances que la micro-optimisation des hyperparamètres. Exemples extrêmes: si vous n'avez pas de fonctionnalités, vous ne pouvez rien prédire. Si vous avez une fonction de triche qui contient l'étiquette de classe, vous pouvez parfaitement tout classer.

  3. Optimisez les hyperparamètres avec les fonctionnalités sélectionnées à l'étape ci-dessus. Cela devrait être un bon ensemble de fonctionnalités maintenant, où cela peut valoir la peine d'optimiser un peu les hyperparams.


Pour répondre à la question supplémentaire que Nikolas a postée dans les commentaires, concernant la façon dont toutes ces choses (sélection de fonctionnalités, optimisation hyperparamétrique) interagissent avec la validation croisée k-fold: je dirais que cela dépend.

Chaque fois que vous utilisez des données dans l'un des plis pour quoi que ce soit, puis que vous évaluez les performances sur ce même pli, vous obtenez une estimation biaisée de vos performances (vous surestimerez les performances). Donc, si vous utilisez des données dans tous les plis pour l'étape de sélection des fonctionnalités, puis évaluez les performances sur chacun de ces plis, vous obtiendrez des estimations biaisées des performances pour chacun d'eux (ce qui n'est pas bon). De même, si vous avez une optimisation d'hyperparamètre basée sur les données et utilisez des données de certains plis (ou de tous les plis), puis que vous évaluez sur ces mêmes plis, vous obtiendrez à nouveau des estimations biaisées des performances. Les solutions possibles sont:

  1. Répétez le pipeline complet à l'intérieur de chaque pli séparément (par exemple, à l'intérieur de chaque pli, faites la sélection des fonctionnalités + optimisation hyperparamétrique et modèle de formation). Cela signifie que la validation croisée k-fold vous donne des estimations impartiales des performances de ce pipeline complet .

  2. Divisez votre ensemble de données initial en un '' ensemble de données de prétraitement '' et un '' ensemble de données de formation / test ''. Vous pouvez faire votre sélection d'entités + optimisation hyperparamétrique sur le '' jeu de données de prétraitement ''. Ensuite, vous corrigez les entités et les hyperparamètres sélectionnés et effectuez une validation croisée k-fold sur le `` train / ensemble de données de test ''. Cela signifie que la validation croisée k-fold vous donne des estimations impartiales des performances de votre algorithme ML compte tenu des valeurs fixes de l'ensemble de fonctionnalités et de l'hyperparamètre .

Notez comment les deux solutions entraînent des estimations de performances légèrement différentes. Laquelle est la plus intéressante dépend de votre cas d'utilisation, dépend de la façon dont vous prévoyez de déployer vos solutions d'apprentissage automatique dans la pratique. Si vous êtes, par exemple, une entreprise qui a l'intention de disposer du pipeline complet de sélection de fonctionnalités + optimisation hyperparamétrique + formation s'exécutant automatiquement tous les jours / semaines / mois / année / peu importe, vous serez également intéressé par les performances de cet ensemble pipeline, et vous voudrez la première solution.

Si, d'autre part, vous ne pouvez vous permettre de faire la sélection des fonctionnalités + l'optimisation des hyperparamètres qu'une seule fois dans votre vie, et ensuite de ne réentraîner que légèrement régulièrement votre algorithme (avec les valeurs des fonctionnalités et des hyperparamètres fixes), alors les performances seule cette étape sera ce qui vous intéresse, et vous devriez opter pour la deuxième solution

Dennis Soemers
la source
Pouvez-vous également fournir des références?
Nikolas Rieble
1
Il y a quelques photos d'un livre bien connu dans cet article: nodalpoint.com/not-perform-feature-selection . Ceux-ci semblent d'accord avec ma «solution possible 1». Je n'ai pas forcément de référence pour l'autre cas, à part ... moi? J'ai fourni mon raisonnement / motivation là-bas, qui à mon avis vérifie, c'est donc la référence: D
Dennis Soemers
1
Ce chapitre d'ESL devrait être une lecture obligatoire à 100% pour tout modeleur prédictif.
Matthew Drury du
Donc, en ce qui concerne la solution 1, comment obtenez-vous votre ensemble de fonctionnalités final et vos hyperparamètres de modèle après avoir exécuté la sélection de fonctionnalité (fs) et l'optimisation d'hyperparam (ho) dans plusieurs iters de cv? De plus, lorsque nous les exécutons dans un iter de cv, exécutons-nous d'abord fs, puis ho en utilisant ces fonctionnalités?
sma
1
@skim CV est généralement utilisé uniquement pour obtenir une bonne estimation des performances. En règle générale, vous ne commenceriez pas directement à utiliser l'un des modèles formés dans l'un des ensembles de plis . Si vous trouvez que les performances estimées par CV sont satisfaisantes, vous exécutez à nouveau le pipeline complet sur l'ensemble de données de formation (y compris, encore une fois, la sélection des fonctionnalités et le réglage de l'hyperparam). L'ensemble de fonctionnalités + hyperparams + modèle que vous obtenez est ce que vous K1
mettriez
4

Personne n'a mentionné d'approches qui rendent le réglage des hyper-paramètres et la sélection des fonctionnalités identiques, donc j'en parlerai. Dans ce cas, vous devez concevoir toutes les fonctionnalités souhaitées au début et les inclure toutes.

Les recherches menées actuellement dans la communauté des statistiques ont tenté de faire de la sélection des fonctionnalités un critère de réglage. Fondamentalement, vous pénalisez un modèle de telle manière qu'il est incité à choisir seulement quelques fonctionnalités qui l'aident à faire la meilleure prédiction. Mais vous ajoutez un paramètre de réglage pour déterminer l'ampleur d'une pénalité à encourir.

En d'autres termes, vous autorisez le modèle à choisir les fonctionnalités pour vous et vous avez plus ou moins le contrôle du nombre de fonctionnalités. Cela réduit en fait le calcul car vous n'avez plus à décider quelles fonctionnalités, mais juste combien de fonctionnalités et le modèle fait le reste.

Ainsi, lorsque vous effectuez une validation croisée sur le paramètre, vous effectuez également une validation croisée sur la sélection des fonctionnalités.

Il existe déjà de nombreux modèles ML qui intègrent cette sélection de fonctionnalités d'une manière ou d'une autre.

  • Machines à vecteurs de support doublement régularisées qui sont comme des SVM normaux mais avec une sélection de fonctionnalités
  • Filet élastique qui traite de la régression linéaire
  • Régularisation des abandons dans les réseaux de neurones (ne pas avoir de référence pour celui-ci)
  • La forêt aléatoire fait normalement des sous-ensembles aléatoires des fonctionnalités, donc le type de poignée gère la sélection des fonctionnalités pour vous

En bref, les gens ont essayé d'incorporer le réglage des paramètres et la sélection des fonctionnalités en même temps afin de réduire la complexité et de pouvoir effectuer une validation croisée

MathIsKey
la source
0

Je pense que vous y pensez un peu trop. La sélection des fonctionnalités, qui fait partie de l'ingénierie des fonctionnalités, est généralement utile, mais certaines fonctionnalités redondantes ne sont pas très nocives au début d'un système d'apprentissage automatique. La meilleure pratique consiste donc à générer d'abord toutes les fonctionnalités significatives, puis à les utiliser pour sélectionner des algorithmes et ajuster les modèles.Après avoir ajusté le modèle, vous pouvez ajuster l'ensemble de fonctionnalités ou décider d'utiliser de nouvelles fonctionnalités.

La procédure d'apprentissage automatique est en fait un processus itératif, dans lequel vous effectuez l'ingénierie des fonctionnalités, puis essayez avec certains algorithmes, puis ajustez les modèles et revenez en arrière jusqu'à ce que vous soyez satisfait du résultat.

THN
la source
Vous voulez dire qu'il essaie jusqu'à ce que cela fonctionne: D
Grunwalski
Essayer dans une procédure ML, pas au hasard. En fait, ML est en fait un peu de piratage en soi.
THN