Procédure de sélection variable pour la classification binaire

29

Quelle est la sélection de variable / caractéristique que vous préférez pour la classification binaire quand il y a beaucoup plus de variables / caractéristique que d'observations dans l'ensemble d'apprentissage? Le but ici est de discuter de la procédure de sélection des caractéristiques qui réduit le mieux l'erreur de classification.

Nous pouvons fixer des notations pour la cohérence: pour , soit \ {x_1 ^ i, \ dots, x_ {n_i} ^ i \} l'ensemble d'apprentissage des observations du groupe i . Donc n_0 + n_1 = n est la taille de l'ensemble d'apprentissage. Nous définissons p comme le nombre d'entités (c'est-à-dire la dimension de l'espace d'entités). Soit x [i] la i- ème coordonnée de x \ in \ mathbb {R} ^ p .{ x i 1 , , x i n i } i n 0 + n 1 = n p x [ i ] i x R pi{0,1}{x1i,,xnii}in0+n1=npx[i]ixRp

Veuillez donner des références complètes si vous ne pouvez pas donner les détails.

EDIT (mis à jour en continu): Procédures proposées dans les réponses ci-dessous

Comme il s'agit d'un wiki communautaire, il peut y avoir plus de discussion et de mise à jour

J'ai une remarque: dans un certain sens, vous donnez tous une procédure qui permet de classer les variables mais pas la sélection des variables (vous êtes assez évasif sur la façon de sélectionner le nombre de fonctionnalités, je suppose que vous utilisez tous la validation croisée?) Pouvez-vous améliorer les réponses dans ce sens? (comme il s'agit d'un wiki communautaire, vous n'avez pas besoin d'être le rédacteur de réponses pour ajouter des informations sur la façon de sélectionner le nombre de variables? J'ai ouvert une question dans ce sens ici Validation croisée en très haute dimension (pour sélectionner le nombre de variables utilisées dans la classification dimensionnelle très élevée) )

Robin Girard
la source
Est-ce une question ou une piscine? Si c'est le cas, ce devrait être un wiki communautaire. Si c'est le premier, donnez plus de détails sur ce que vous voulez réaliser? Par exemple, s'agit-il d'une sélection optimale tout à fait pertinente ou plutôt minimale? Combien ça coûte? Quelle est la difficulté du problème de classification?
pool ... many signifie 1000 entités ou plus et moins de 100 observations.
robin girard

Réponses:

18

Une approche très populaire est la régression logistique pénalisée, dans laquelle on maximise la somme du log-vraisemblance et un terme de pénalisation composé de la norme L1 ("lasso"), de la norme L2 ("crête"), une combinaison des deux ("élastique"), ou une pénalité associée à des groupes de variables ("groupe lasso"). Cette approche a de nombreux avantages:

  1. Il a de fortes propriétés théoriques, par exemple, voir cet article de Candes & Plan et des liens étroits avec la détection compressée;
  2. Il a des expositions accessibles, par exemple, dans Elements of Statistical Learning de Friedman-Hastie-Tibshirani (disponible en ligne);
  3. Il dispose de logiciels facilement disponibles pour s'adapter aux modèles. R a le paquet glmnet qui est très rapide et fonctionne bien avec des ensembles de données assez volumineux. Python a scikit-learn , qui comprend la régression logistique pénalisée L1 et L2;
  4. Cela fonctionne très bien dans la pratique, comme le montrent de nombreux articles d'application dans la reconnaissance d'image, le traitement du signal, la biométrie et la finance.
gappy
la source
10

J'ai une légère préférence pour Random Forests de Leo Breiman & Adele Cutleer pour plusieurs raisons:

  • il permet de faire face à des prédicteurs catégoriques et continus, ainsi qu'à une taille d'échantillon de classe déséquilibrée;
  • en tant que méthode d'ensemble / embarquée, la validation croisée est embarquée et permet d'estimer une erreur de généralisation;
  • il est relativement insensible à ses paramètres de réglage (% de variables sélectionnées pour la croissance d'un arbre, nombre d'arbres construits);
  • il fournit une mesure originale d'importance variable et est capable de découvrir des interactions complexes entre les variables (bien que cela puisse conduire à des résultats difficiles à lire).

Certains auteurs ont fait valoir qu'il fonctionnait aussi bien que les SVM pénalisés ou les Gradient Boosting Machines (voir, par exemple, Cutler et al., 2009, pour ce dernier point).

Une couverture complète de ses applications ou avantages peut être hors du sujet, donc je suggère les éléments d'apprentissage statistique de Hastie et al. (chap.15) et Sayes et al. (2007) pour d'autres lectures.

Enfin, il a une belle implémentation en R, avec le package randomForest . D'autres packages R l'étendent ou l'utilisent également, par exemple party et caret .

Les références:

Cutler, A., Cutler, DR et Stevens, JR (2009). Tree-Based Methods, dans High-Dimensional Data Analysis in Cancer Research , Li, X. et Xu, R. (éd.), Pp. 83-101, Springer.

Saeys, Y., Inza, I. et Larrañaga, P. (2007). Un examen des techniques de sélection des fonctionnalités en bioinformatique. Bioinformatics , 23 (19) : 2507-2517.

chl
la source
7

Balayage Metropolis / MCMC

  • Sélectionnez quelques fonctionnalités au hasard pour commencer, entraînez le classificateur uniquement sur elles et obtenez l'erreur.
  • Apportez des modifications aléatoires à cet ensemble de travail - supprimez une fonctionnalité, ajoutez-en une au hasard ou remplacez une fonctionnalité par une non utilisée actuellement.
  • Former un nouveau classificateur et obtenir son erreur; stocker dans dEla différence l'erreur sur le nouvel ensemble moins l'erreur sur l'ensemble précédent.
  • Avec probabilité, min(1;exp(-beta*dE))acceptez ce changement, sinon rejetez-le et essayez un autre changement aléatoire.
  • Répétez-le pendant longtemps et retournez enfin l'ensemble de travail qui a globalement atteint la plus petite erreur.

Vous pouvez l'étendre avec un contrôle plus sage des betaparamètres. Le moyen le plus simple consiste à utiliser le recuit simulé lorsque vous augmentez beta(abaissez la température en analogie physique) au fil du temps pour réduire les fluctuations et conduire l'algorithme vers le minimum. Il est plus difficile d'utiliser l' échange de répliques .

user88
la source
5

Si vous êtes uniquement intéressé par les performances de généralisation, il vaut probablement mieux ne pas effectuer de sélection de fonctionnalités et utiliser plutôt la régularisation (par exemple, régression de crête). Il y a eu plusieurs défis ouverts dans la communauté du machine learning sur la sélection des fonctionnalités, et les méthodes qui reposent sur la régularisation plutôt que sur la sélection des fonctionnalités fonctionnent généralement au moins aussi bien, sinon mieux.

Dikran Marsupial
la source
3

Sélection avant gourmande.

Les étapes de cette méthode sont les suivantes:

  • Assurez-vous d'avoir un train et un ensemble de validation
  • Répétez ce qui suit
    • Entraînez un classificateur avec chaque entité unique qui n'est pas encore sélectionnée et avec toutes les fonctionnalités précédemment sélectionnées
    • Si le résultat s'améliore, ajoutez la fonctionnalité la plus performante, sinon arrêtez la procédure
Peter Smit
la source
Comment "entraînez-vous" votre classificateur? Vraisemblablement, cela se fait sur l'ensemble d'entraînement. S'il s'agit d'une machine à vecteur de support (SVM), il y a plusieurs paramètres à essayer pendant la formation. Chacun est-il testé par rapport à l'ensemble de validation (test)? Ou utilisez-vous la validation croisée k-fold? Combien de fois utilisez-vous l'ensemble de validation (test) pour vérifier vos performances - c'est probablement la précision. Désolé d'être pédant, mais c'est une réponse mal définie et risque de sur-ajuster.
Thylacoleo
@Thylacoleo C'est une méthode basique et gourmande très grossière. Souvent, vous conservez votre jeu de validation le même pendant les exécutions, mais ce que vous aimez est correct.
Peter Smit
2

Élimination en arrière.

Commencez avec l'ensemble complet, puis entraînez de manière itérative le classificateur sur les fonctionnalités restantes et supprimez la fonctionnalité de la plus petite importance, arrêtez-vous lorsque l'erreur de classificateur augmente / devient rapidement élevée inacceptable.

L'importance peut même être obtenue en supprimant de manière itérative chaque fonctionnalité et en vérifiant l'augmentation d'erreur ou en l'adaptant au classificateur s'il la produit (comme dans le cas de la forêt aléatoire).

utilisateur88
la source
2
Mais la question dit qu'il y a plus de variables que d'observations. Il n'est donc pas possible de commencer par l'ensemble complet.
Rob Hyndman
Quel est le problème?
2
Vous ne pouvez pas ajuster un modèle qui a plus de variables que d'observations. Il n'y a pas suffisamment de degrés de liberté pour l'estimation des paramètres.
Rob Hyndman
1
Dans le calcul de F de Fisher, vous calculez le F comme (n - k - p) / (k - 1) * ...avec nle nombre d'observations, kle nombre de classes (2 ici) et ple nombre de variables. n - 2 - p < 0quand n < p + 2(ce qui est le cas ici) qui mène à F < 0. Ce ne serait pas un problème?
Matthieu
3
Une régression régularisée ou entièrement bayésienne permettrait d'obtenir une solution unique avec l'ensemble complet de prédicteurs au départ - sans doute en va-t-il de même pour certaines autres techniques de ML.
Scortchi - Réintégrer Monica