La sélection des fonctionnalités doit-elle être effectuée uniquement sur les données d'entraînement (ou toutes les données)?

10

La sélection des fonctionnalités doit-elle être effectuée uniquement sur les données d'entraînement (ou toutes les données)? J'ai parcouru des discussions et des articles tels que Guyon (2003) et Singhi et Liu (2006) , mais je ne suis toujours pas sûr de la bonne réponse.

La configuration de mon expérience est la suivante:

  • Ensemble de données: 50 témoins sains et 50 patients atteints de maladie (caractéristiques du cca 200 pouvant être pertinentes pour la prédiction de la maladie).
  • La tâche consiste à diagnostiquer la maladie en fonction des fonctionnalités disponibles.

Ce que je fais c'est

  1. Prenez l'ensemble de données et effectuez la sélection d'entités (FS). Je conserve uniquement les fonctionnalités sélectionnées pour un traitement ultérieur
  2. Fractionner pour tester et former, classificateur de train en utilisant les données du train et les caractéristiques sélectionnées. Ensuite, appliquez le classificateur aux données de test (à nouveau en utilisant uniquement les fonctionnalités sélectionnées). La validation sans intervention est utilisée.
  3. obtenir une précision de classification
  4. Moyenne: répéter 1) -3) N fois. (100).N=50

Je suis d'accord que faire de la FS sur l'ensemble de données entier peut introduire un certain biais, mais mon avis est qu'il est "moyenné" pendant la moyenne (étape 4). Est-ce exact? (La variance de précision est )<2%

1 Guyon, I. (2003) "An Introduction to Variable and Feature Selection", The Journal of Machine Learning Research, Vol. 3, pp. 1157-1182
2 Singhi, SK et Liu, H. (2006) "Feature Subset Selection Bias for Classification Learning", Proceeding ICML '06 Actes de la 23e conférence internationale sur l'apprentissage automatique, pp. 849-856

pedro29
la source

Réponses:

12

La procédure que vous utilisez se traduira par des estimations de performances biaisées de manière optimiste, car vous utilisez les données de l'ensemble de test utilisé aux étapes 2 et 3 pour décider des fonctionnalités utilisées à l'étape 1. La répétition de l'exercice réduit la variance de l'estimation des performances, pas la biais, donc le biais ne sera pas moyen. Pour obtenir une estimation de performance non biaisée, les données de test ne doivent en aucun cas être utilisées pour faire des choix concernant le modèle, y compris la sélection des fonctionnalités.

Une meilleure approche consiste à utiliser la validation croisée imbriquée, de sorte que la validation croisée externe fournit une estimation des performances pouvant être obtenues à l'aide d'une méthode de construction du modèle (y compris la sélection des fonctionnalités) et la validation croisée interne est utilisée pour sélectionner les fonctionnalités indépendamment. dans chaque pli de la validation croisée externe. Créez ensuite votre modèle prédictif final en utilisant toutes les données.

Comme vous avez plus de fonctionnalités que de cas, vous êtes très susceptible de sur-ajuster les données simplement en sélectionnant des fonctionnalités. C'est un peu un mythe que la sélection des fonctionnalités améliore les performances prédictives, donc si c'est ce qui vous intéresse (plutôt que d'identifier les fonctionnalités pertinentes comme une fin en soi), il est probablement préférable d'utiliser la régression de crête et de ne pas exécuter de fonctionnalité. sélection. Cela donnera probablement de meilleures performances prédictives que la sélection des fonctionnalités, à condition que le paramètre de crête soit soigneusement sélectionné (j'utilise la minimisation de la statistique PRESS d'Allen - c'est-à-dire l'estimation de laisser-un-out de l'erreur quadratique moyenne).

Pour plus de détails, voir Ambroise et McLachlan et ma réponse à cette question .

Dikran Marsupial
la source
Merci de votre réponse. En fait, je m'intéresse aux deux, pour trouver les fonctionnalités pertinentes et améliorer les performances prédictives. Dans mes expériences (SVM pour la classification), la sélection des fonctionnalités a considérablement amélioré la précision de la prédiction (cependant, comme vous l'avez noté, cela peut être le résultat d'un sur-ajustement des données). Je suppose que par régression de crête, vous voulez dire quelque chose que l'on appelle aussi régularisation Tikhonov?
pedro29
oui, la régression de crête est juste une régression linéaire normale avec un terme de pénalité basé sur la norme quadratique des poids. Pour la plupart des problèmes, il fonctionne aussi bien que le SVM, mais il est plus facile à implémenter (et vous pouvez calculer l'erreur de validation croisée de laisser-un-essentiellement essentiellement gratuitement, qui peut être utilisé pour régler les hyper-paramètres).
Dikran Marsupial
Soit dit en passant, quelle est la différence entre la régularisation des crêtes et la sélection des caractéristiques? Je veux dire, à la fin de la journée, les deux indiquent "le meilleur sous-ensemble" de prédicteurs d'un ensemble donné de prédicteurs.
pedro29
la régression d'arête n'identifie pas un sous-ensemble de caractéristiques, la forme de régression pénalisée LASSO ou LARS le fait. Ce serait mon choix de méthode de sélection des fonctionnalités car elle est moins susceptible d'être sur-ajustée car le terme de pénalité impose un ordre dans les fonctionnalités entrant et sortant du modèle, donc il y a moins de degrés de liberté que de rechercher de manière exhaustive le meilleur ensemble de traits.
Dikran Marsupial
3

Tout comme un addendum aux réponses ici, j'ai deux liens qui m'ont vraiment aidé à comprendre pourquoi ce n'est pas une bonne procédure:

Edit: comme demandé, une brève explication du contenu des liens:

Supposons que je forme un classificateur et que j'ai un ensemble de données de 1000 échantillons, avec 1 million d'entités chacun. Je ne peux pas tous les traiter, j'ai donc besoin de moins de fonctionnalités (disons, je peux calculer 300 fonctionnalités). J'ai également un ensemble de tests en attente de 100 échantillons pour estimer avec précision ma précision hors échantillon, dans le monde réel.

Si je filtre mes 1 million d'entités à 300, en sélectionnant les entités ayant la plus forte corrélation avec les cibles de l'ensemble de mes données, je fais une erreur (car j'introduis un sur-ajustement qui ne peut pas être détecté par la validation croisée plus tard). Mon set retenu le montrera en crachant une mauvaise valeur de précision.

Selon les liens ci-dessus, la bonne façon de le faire est de diviser mon ensemble de données en un ensemble de formation et un ensemble de validation croisée, puis de régler mon modèle (filtrage des fonctionnalités, etc.) en fonction de cet ensemble de formation et de son score CV associé. Si j'utilise des plis en K, je dois régler à partir de zéro chaque fois que je fais un split / fold, puis faire la moyenne des résultats.

Par programme, vous procédez comme suit:

  • Conservez une partie de votre ensemble de données en tant qu'ensemble d'exclusion.
  • Divisez le reste de votre ensemble de données (désormais appelé T1) en K-folds.
  • Dans une boucle for de i = 1 à K, procédez comme suit:
    • sélectionnez le ième pli comme votre ensemble de CV et les échantillons restants comme votre ensemble d'entraînement (désormais appelé Ti).
    • Faites ce que vous voulez pour l'ingénierie et la sélection des fonctionnalités: filtrer les fonctionnalités, les combiner, etc.
    • Convertissez votre ensemble de CV (le pli actuel, appelé CVi) et votre ensemble d'entraînement actuel Ti en un avec les fonctionnalités appropriées.
    • Formez votre mannequin sur le set d'entraînement Ti
    • Obtenez le score du pli actuel, CVi. Ajoutez ce score à une liste contenant tous les scores.
  • Maintenant, votre liste a le score de chaque pli, donc vous faites la moyenne, en obtenant le score K-folds.

Il est très important que vous effectuiez l'ingénierie des fonctionnalités à l'intérieur de la boucle, sur l'ensemble de sous-formation, Ti, plutôt que sur l'ensemble de formation complet, T1.

La raison en est que lorsque vous ajustez / ingénieur de fonctionnalités pour Ti, vous testez sur CVi, qui n'est pas visible pour ce modèle. Alors que, si vous ajustez / intégrez l'ingénieur sur T1, tout CV que vous choisissez doit être un sous-ensemble T1, et donc vous serez biaisé de manière optimiste, c'est-à-dire que vous serez surajusté, car vous vous entraînez et testez sur les mêmes échantillons de données.

Une très bonne réponse StackExchange est celle- ci, qui l'explique vraiment plus en profondeur et avec un exemple de code. Voir également cela comme un addendum.

Abhishek Divekar
la source
1
Pourriez-vous inclure un bref résumé du contenu de ces liens? Nous préférons les réponses autonomes, sinon elles peuvent être très vulnérables aux "linkrot" si les liens changent de position. Alternativement, nous pouvons convertir cela en un commentaire pour vous.
Silverfish
@Silverfish Done
Abhishek Divekar
Donc, à l'intérieur de la boucle for, on pourrait avoir différentes fonctionnalités sélectionnées pour différents plis?
stackunderflow
2

Le bootstrap "optimisme" Efron-Gong est très bon pour cela. L'idée est d'utiliser toutes les données disponibles pour développer le modèle prédictif et d'utiliser toutes les données pour estimer les performances futures probables de ce même modèle. Et la taille de votre échantillon est trop petite d'un facteur 100 pour que les approches à échantillon divisé fonctionnent.

Pour utiliser correctement le bootstrap, vous devez programmer toutes les étapes qui ont utilisé et les répéter à chaque rééchantillonnage. À l'exception de la sélection des fonctionnalités, voici un bon exemple: Interprétation d'un modèle de régression logistique avec plusieurs prédicteursY

Frank Harrell
la source