Question:
Questions sur la sélection des variables pour la classification et les différentes techniques de classification
ialm
2011-05-10 22:29:15 UTC
view on stackexchange narkive permalink

J'ai une question concernant la sélection et la classification des fonctionnalités. Je vais travailler avec R. Je devrais commencer par dire que je ne suis pas très familier avec les techniques d'exploration de données, mis à part un bref aperçu fourni par un cours de premier cycle sur l'analyse multivariée, alors pardonnez-moi si je manque de détails sur ma question. Je ferai de mon mieux pour décrire mon problème.

Tout d'abord, un peu sur mon projet: je travaille sur un projet de cytométrie d'image, et l'ensemble de données est composé de plus de 100 caractéristiques quantitatives d'images histologiques de noyaux cellulaires . Toutes les variables sont des variables continues décrivant les caractéristiques du noyau, telles que la taille, la quantité d'ADN, etc. Il existe actuellement un processus manuel et un processus automatique pour obtenir ces images cellulaires. Le processus manuel est (très) lent, mais est effectué par un technicien et ne produit que des images utilisables pour une analyse plus approfondie. Le processus automatique est très rapide, mais introduit trop d'images inutilisables - seulement environ 5% des images conviennent pour une analyse plus approfondie, et il y a des milliers d'images nucléaires par échantillon. Il s'avère que le nettoyage des données obtenues à partir du processus automatique prend en fait plus de temps que le processus manuel.

Mon objectif est de former une méthode de classification, en utilisant R, pour distinguer les bons objets des mauvais objets à partir des données obtenues à partir du processus automatique. J'ai un ensemble de formation déjà classé qui a été obtenu à partir du processus automatique. Il se compose de 150 000 lignes, dont ~ 5% sont de bons objets et ~ 95% sont de mauvais objets.

Ma première question concerne la sélection des fonctionnalités. Il existe plus de 100 fonctionnalités explicatives continues, et j'aimerais éventuellement me débarrasser des variables de bruit pour (espérons-le) aider à la classification. Quelles méthodes existe-t-il pour réduire la dimensionnalité dans le but d'améliorer la classification? Je comprends que la nécessité d'une réduction variable peut varier en fonction de la technique de classification utilisée.

Ce qui m'amène à ma deuxième question. J'ai lu sur différentes techniques de classification, mais je pense que je ne peux pas déterminer de manière adéquate la méthode la plus appropriée pour mon problème. Mes principales préoccupations sont d'avoir un faible taux d'erreurs de classification des bons objets par rapport aux mauvais objets, et le fait que la probabilité a priori des bons objets est bien inférieure à la probabilité a priori des mauvais objets. Avoir un mauvais objet classé comme bon est moins compliqué que de récupérer un bon objet du pool de mauvais objets, mais ce serait bien si pas trop de mauvais objets étaient classés comme bons.

J'ai lisez ce message et j'envisage actuellement Random Forests selon la réponse de chl. J'aimerais aussi explorer d'autres méthodes et je voudrais recueillir les suggestions des bonnes personnes ici chez CV. J'apprécie également toutes les lectures sur le sujet de la classification qui pourraient être utiles, ainsi que les suggestions pour les packages R à utiliser.

Veuillez demander plus de détails si mon message manque de détails.

J'ai oublié de mentionner que j'explore actuellement le package caret dans R.
@veol caret a une routine de sélection de fonctionnalités appelée rfe que vous pourriez trouver utile. Vous pouvez en savoir plus ici, mais veillez à ne pas l'utiliser sur des algorithmes (tels que glmnet) qui ont une sélection de fonctionnalités intégrée. http://cran.r-project.org/web/packages/caret/vignettes/caretSelection.pdf
Avez-vous un gros budget pour explorer ce problème? Votre ensemble de données est-il que vous pouvez partager publiquement?
@Zach Merci pour le lien. Quant au deuxième commentaire, j'ai en fait été embauché pour travailler sur ce projet (je suis un étudiant coop universitaire), j'ai donc amplement le temps de travailler sur ce problème. En ce qui concerne l'ensemble de données, je ne suis pas autorisé à le partager, mais je pourrai peut-être créer un lien vers certains articles publiquement disponibles concernant le type d'analyse que nous effectuons sur les données si vous souhaitez en savoir plus.
@veol Oh, je vois. Cela devrait donc être une bonne expérience d'apprentissage pour vous. Cela ressemblait à une analyse intéressante, j'aimerais voir l'un des articles.
@Zach Malheureusement, je n'ai pas pu trouver de versions gratuites des articles qui m'ont été donnés à lire. Voici un article concernant l'imagerie des cellules et le calcul des caractéristiques numériques, il est proche du type de données que je traite: [Lien] (http://www.ncbi.nlm.nih.gov/pubmed/8570289) .
Deux réponses:
#1
+14
Dikran Marsupial
2011-05-10 23:04:25 UTC
view on stackexchange narkive permalink

La sélection des fonctionnalités n'améliore pas nécessairement les performances des systèmes de classification modernes et aggrave assez souvent les performances. À moins que la découverte des caractéristiques les plus importantes soit un objectif de l'analyse, il est souvent préférable de ne même pas essayer d'utiliser la régularisation pour éviter le surajustement (sélectionner les paramètres de régularisation par exemple par validation croisée).

La raison pour laquelle la sélection d'entités est difficile est qu'elle implique un problème d'optimisation avec de nombreux degrés de liberté (essentiellement un par entité) où le critère dépend d'un échantillon fini de données. Cela signifie que vous pouvez sur-ajuster le critère de sélection des fonctionnalités et vous retrouver avec un ensemble de fonctionnalités qui fonctionne bien pour cet échantillon de données particulier, mais pas pour tout autre (c'est-à-dire qu'il se généralise mal). Par contre, la régularisation, tout en optimisant également un critère basé sur un échantillon fini de données, implique moins de degrés de liberté (généralement un), ce qui signifie qu'il est plus difficile de sur-ajuster le critère.

Il semble pour moi que l'idée de "sélection de fonctionnalités donne de meilleures performances" a plutôt dépassé sa date de vente. Pour les classificateurs linéaires non régularisés simples (par exemple, la régression logistique), la complexité du modèle (dimension VC) augmente avec le nombre d'entités. Une fois la régularisation effectuée, la complexité du modèle dépend de la valeur du paramètre de régularisation plutôt que du nombre de paramètres. Cela signifie que les classificateurs régularisés résistent au sur-ajustement (à condition que vous régliez correctement le paramètre de régularisation), même dans des espaces de très grande dimension. En fait, c'est la raison pour laquelle la machine à vecteurs de support fonctionne, utilisez un noyau pour transformer les données en un espace dimensionnel élevé (éventuellement infini), puis utilisez la régularisation pour contrôler la complexité du modèle et ainsi éviter le sur-ajustement. / p>

Cela dit, il n'y a pas de déjeuners gratuits; votre problème peut être celui où la sélection des fonctionnalités fonctionne bien, et la seule façon de le savoir est de l'essayer. Cependant, quoi que vous fassiez, assurez-vous d'utiliser quelque chose comme la validation croisée imbriquée pour obtenir une estimation impartiale des performances. La validation croisée externe est utilisée pour l'évaluation des performances, mais à chaque fois, répétez chaque étape de l'ajustement du modèle (y compris la sélection de fonctionnalités) de nouveau indépendamment. Une erreur courante consiste à effectuer une sélection de fonctionnalités en utilisant toutes les données, puis à effectuer une validation croisée pour estimer les performances à l'aide des fonctionnalités identifiées. Il devrait être évident pourquoi ce n'est pas la bonne chose à faire, mais beaucoup l'ont fait car la bonne approche est coûteuse en calcul.

Ma suggestion est d'essayer les SVM ou la régression logistique du noyau ou LS-SVM, etc. avec différents noyaux, mais pas de sélection de fonctionnalités. Si rien d'autre, cela vous donnera une base de référence pleine de sens.

Merci pour votre réponse détaillée. Je ne connais pas les machines vectorielles de support, mais j'ai hâte de l'essayer. Après une lecture rapide sur wikipedia, j'essaie SVM linéaire avec les paramètres par défaut dans R sur un sous-ensemble aléatoire de mes données (cela prenait un certain temps avec l'ensemble de données). Recommandez-vous de bons articles ou lectures pour me familiariser avec les SVM?
@veol Un SVM linéaire est un bon point de départ, mais n'utilisez pas seulement les paramètres par défaut, la clé pour obtenir de bonnes performances d'un SVM réside dans le choix d'un bon noyau et dans l'optimisation minutieuse des hyper-paramètres (le paramètre de régularisation et tout paramètres du noyau). Cela peut être fait en minimisant l'erreur de validation croisée ou une limite sur les performances de généralisation (par exemple, les limites "radius-margin" ou "span". Je n'utilise pas R, mais tout package SVM décent devrait automatiser cette procédure via la descente de gradient ou recherche de grille.
@veol En ce qui concerne les sources d'informations, ainsi que les deux articles clés sur les SVM (Boser Guyon et Vapnik et Cortes et Vapnik), il existe de nombreux bons manuels qui couvrent ce genre de choses, comme "apprendre avec des noyaux" de Scholkopf et Smola , "méthodes du noyau pour la reconnaissance de formes" par Shawe-Taylor et Christianini ou "reconnaissance de formes et apprentissage automatique" par Bishop. Bonne chance avec votre projet!
(+1) belle explication des bases. Là encore, un moment où j'aimerais ajouter une réponse à mes favoris (au lieu de toute la question).
Merci pour la bonne réponse, j'ai beaucoup appris. Comment faire une régression logistique du noyau dans R?
#2
+6
richiemorrisroe
2011-05-10 23:04:58 UTC
view on stackexchange narkive permalink

En ce qui concerne la réduction de la dimensionnalité, un bon premier choix pourrait être l ' analyse des composants principaux.

À part cela, je n'ai pas trop à ajouter, sauf que tout intérêt pour l'exploration de données, je vous recommande vivement de lire les éléments de l'apprentissage statistique. C'est à la fois rigoureux et clair, et même si je ne l'ai pas terminé, cela vous donnerait probablement beaucoup d'informations sur la bonne façon d'aborder votre problème. Chapitre 4, les classificateurs linéaires suffiraient certainement pour vous aider à démarrer.

Hélas, l'ACP a été la première chose que j'ai tenté de réduire la dimensionnalité des données. Cela n'a pas donné de résultats significatifs et on m'a dit de me méfier de la création de transformations qui pourraient ne s'appliquer qu'à l'ensemble d'apprentissage et non aux données futures. Merci pour la recommandation du livre - bien que je connaisse LDA, il existe d'autres méthodes qui peuvent s'avérer utiles. Je verrai s'il y en a un exemplaire dans mon immeuble ou à la bibliothèque universitaire.
Une copie PDF est disponible en téléchargement sur le lien ci-dessus si cela vous aide.
Ah, je n'avais pas remarqué ça. Je suis allé directement à la table des matières. Lire ceci semble être un bon point de départ.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...