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?
la source
Réponses:
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:
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.
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.
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:
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 .
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
la source
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.
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
la source
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.
la source