220 votes

Quel classificateur d'apprentissage automatique choisir, en général ?

Supposons que je travaille sur un problème de classification. (La détection de fraudes et le spam de commentaires sont deux problèmes sur lesquels je travaille en ce moment, mais je suis curieux de toute tâche de classification en général).

Comment savoir quel classificateur je dois utiliser ?

  1. Arbre de décision
  2. SVM
  3. Bayesien
  4. Réseau neuronal
  5. K-voisins les plus proches
  6. Q-learning
  7. Algorithme génétique
  8. Processus de décision de Markov
  9. Réseaux neuronaux convolutifs
  10. Régression linéaire ou régression logistique
  11. Boosting, bagging, ensambling
  12. Montée en pente aléatoire ou recuit simulé
  13. ...

Dans quels cas l'un d'entre eux est-il le premier choix "naturel", et quels sont les principes de ce choix ?

Exemples du type de réponses que je recherche (tirés de l'étude de Manning et al. Introduction à la recherche d'informations livre) :

a. Si vos données sont étiquetées, mais que vous n'en avez qu'une quantité limitée, vous devez utiliser un classificateur avec un biais élevé (par exemple, Naive Bayes). .

Je suppose que c'est parce qu'un classificateur à biais élevé aura une variance plus faible, ce qui est une bonne chose en raison de la petite quantité de données.

b. Si vous disposez d'une tonne de données, le classificateur n'a pas vraiment d'importance, et vous devriez probablement choisir un classificateur offrant une bonne évolutivité.

  1. Quelles sont les autres directives ? Même des réponses telles que "si vous devez expliquer votre modèle à un cadre supérieur, vous devriez peut-être utiliser un arbre de décision, car les règles de décision sont assez transparentes" sont bonnes. Je me soucie moins des questions de mise en œuvre/librairie, cependant.

  2. Par ailleurs, pour une question quelque peu distincte, outre les classificateurs bayésiens standard, existe-t-il des méthodes "standard de pointe" pour la détection du spam dans les commentaires (par opposition au spam par courriel) ?

10 votes

En réponse à votre question "le meilleur endroit pour poser cette question", vous pourriez également vouloir essayer stats.stackexchange.com

0 votes

62voto

George Points 2224

Sélection du modèle en utilisant validation croisée peut être ce dont vous avez besoin.

Validation croisée

Il s'agit simplement de diviser votre ensemble de données en k sous-ensembles non chevauchants (plis), d'entraîner un modèle en utilisant k-1 plis et de prédire ses performances en utilisant le pli que vous avez laissé de côté. Ceci est fait pour chaque combinaison possible de plis (d'abord le 1er pli, puis le 2ème, .... ..., puis le kième, et former avec les plis restants). Après avoir terminé, vous estimez la performance moyenne de tous les plis (peut-être aussi la variance/écart-type de la performance).

Le choix du paramètre k dépend du temps dont vous disposez. Les valeurs habituelles pour k sont 3, 5, 10 ou même N, où N est la taille de vos données (c'est la même chose que validation croisée "leave-one-out ). Je préfère 5 ou 10.

Sélection du modèle

Disons que vous avez 5 méthodes (ANN, SVM, KNN, etc.) et 10 combinaisons de paramètres pour chaque méthode (selon la méthode). Il vous suffit d'effectuer une validation croisée pour chaque méthode et combinaison de paramètres (5 * 10 = 50) et de sélectionner le meilleur modèle, la meilleure méthode et les meilleurs paramètres. Ensuite, vous réentraînez avec la meilleure méthode et les meilleurs paramètres sur toutes vos données et vous obtenez votre modèle final.

Il y a encore des choses à dire. Si, par exemple, vous utilisez un beaucoup de méthodes et de combinaisons de paramètres pour chacun d'entre eux, il est très probable que vous soyez sur-équipé. Dans de tels cas, vous devez utiliser validation croisée emboîtée .

Validation croisée emboîtée

Sur validation croisée emboîtée vous effectuez une validation croisée sur l'algorithme de sélection du modèle.

Encore une fois, vous divisez d'abord vos données en k plis. Après chaque étape, vous choisissez k-1 comme données d'entraînement et les autres comme données de test. Ensuite, vous exécutez la sélection de modèle (la procédure que j'ai expliquée ci-dessus) pour chaque combinaison possible de ces k plis. Après avoir terminé cela, vous aurez k modèles, un pour chaque combinaison de plis. Après cela, vous testez chaque modèle avec les données de test restantes et vous choisissez le meilleur. Encore une fois, après avoir obtenu le dernier modèle, vous en entraînez un nouveau avec la même méthode et les mêmes paramètres sur toutes les données dont vous disposez. C'est votre modèle final.

Bien sûr, il existe de nombreuses variantes de ces méthodes et d'autres choses que je n'ai pas mentionnées. Si vous avez besoin de plus d'informations à ce sujet, recherchez des publications sur ces sujets.

6 votes

Oui, je connais la validation croisée - je me demandais plutôt s'il y avait des raisons a priori de choisir un certain classificateur (et ensuite je pourrais utiliser la validation croisée pour régler certains paramètres, ou pour choisir entre un ensemble plus petit de classificateurs). Merci quand même !

47voto

John Robertson Points 1385

Le livre " OpenCV "Il y a deux pages intéressantes à ce sujet sur pages 462-463 . Une recherche dans l'aperçu Amazon pour le mot "discriminatif" (probablement google books aussi) vous permettra de voir les pages en question. Ces deux pages sont le plus grand joyau que j'ai trouvé dans ce livre.

En bref :

  • Stimuler - souvent efficace lorsqu'un grande quantité de données de formation est disponible.

  • Arbres aléatoires - souvent très efficace et peut également effectuer régression .

  • K-voisins les plus proches - le plus simple que vous pouvez faire, souvent efficace mais lent et exige beaucoup de mémoire .

  • Réseaux neuronaux - Lenteur de la formation mais très rapide à courir qui reste optimal pour reconnaissance des lettres .

  • SVM - Parmi les meilleurs avec données limitées mais perdre contre booster ou arbres aléatoires seulement quand grands ensembles de données sont disponibles.

38voto

RPVC Points 69

Les éléments à prendre en compte pour choisir l'algorithme à utiliser sont les suivants :

  1. Avez-vous besoin de former de manière progressive (par opposition aux lots) ?

    Si vous devez mettre à jour votre classificateur avec de nouvelles données fréquemment (ou si vous avez des tonnes de données), vous voudrez probablement utiliser le modèle bayésien. Les réseaux neuronaux et les SVM doivent travailler sur les données de formation en une seule fois.

  2. Vos données sont-elles composées de catégorique seulement, ou numérique seulement, ou les deux ?

    Je pense que la méthode bayésienne fonctionne mieux avec des données catégoriques/binomiales. Les arbres de décision ne peuvent pas prédire les valeurs numériques.

  3. Est-ce que vous ou votre public avez besoin de comprendre comment fonctionne le classificateur ?

    Utilisez des arbres bayésiens ou des arbres de décision, car ils peuvent être facilement expliqués à la plupart des gens. Les réseaux neuronaux et les SVM sont des "boîtes noires" dans le sens où vous ne pouvez pas vraiment voir comment ils classent les données.

  4. Combien vitesse de classement dont vous avez besoin ?

    Les SVM sont rapides lorsqu'il s'agit de classifier, car ils n'ont besoin que de déterminer de quel côté de la "ligne" se trouvent vos données. Les arbres de décision peuvent être lents, surtout lorsqu'ils sont complexes (beaucoup de branches, par exemple).

  5. Complexité .

    Les réseaux neuronaux et les SVM peuvent gérer une classification non linéaire complexe.

2 votes

Ce chapitre du livre peut fournir plus d'informations sur la complexité nlp.stanford.edu/IR-book/html/htmledition/

33voto

user1121352 Points 1066

Comme le dit souvent le professeur Andrew Ng : commencez toujours par mettre en œuvre une stratégie de gestion des risques. un algorithme grossier et sale, puis l'affiner de manière itérative. .

Pour la classification, Bayes naïfs est un bon point de départ, car il a de bonnes performances, est hautement évolutif et peut s'adapter à presque tous les types de tâches de classification. Voir aussi 1NN (K-Nearest Neighbours avec un seul voisin) est un algorithme de meilleur ajustement sans problème (parce que les données seront le modèle, et donc vous n'avez pas à vous soucier de l'ajustement de la dimension de votre frontière de décision), le seul problème est le coût de calcul (quadratique parce que vous devez calculer la matrice de distance, donc il peut ne pas être un bon ajustement pour les données de haute dimension).

Un autre bon algorithme de démarrage est le Forêts aléatoires (composé d'arbres de décision), celui-ci est hautement évolutif pour un nombre quelconque de dimensions et présente généralement des performances tout à fait acceptables. Enfin, il existe algorithmes génétiques qui s'adaptent admirablement bien à toutes les dimensions et à toutes les données, avec une connaissance minimale des données elles-mêmes. algorithme génétique microbien (une seule ligne de code C ! par Inman Harvey en 1996), et l'une des plus complexes étant CMA-ES et MOGA/e-MOEA.

Et n'oubliez pas que, souvent, vous ne pouvez pas vraiment savoir ce qui fonctionnera le mieux sur vos données avant d'essayer les algorithmes pour de vrai.

À titre d'information, si vous souhaitez disposer d'un cadre théorique pour tester votre hypothèse et les performances théoriques des algorithmes pour un problème donné, vous pouvez utiliser la fonction Cadre d'apprentissage PAC (Probablement approximativement correct) (attention : c'est très abstrait et complexe !), mais pour résumer, l'essentiel de l'apprentissage PAC dit que vous devriez utiliser l'algorithme le moins complexe, mais suffisamment complexe (la complexité étant la dimensionnalité maximale que l'algo peut adapter) qui peut s'adapter à vos données. En d'autres termes, utilisez le rasoir d'Occam.

11voto

Noam Peled Points 501

Voici un bon article sur cette question : Choisir un classificateur d'apprentissage automatique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X