Supposons que je travaille sur un problème de classification. (La détection de la fraude et le spam de commentaires sont deux problèmes sur lesquels je travaille en ce moment, mais je suis curieux de savoir quelle tâche de classification en général.)
Comment savoir quel classificateur utiliser?
- Arbre de décision
- SVM
- Bayésien
- Réseau neuronal
- K-voisins les plus proches
- Q-learning
- Algorithme génétique
- Processus de décision Markov
- Réseaux de neurones convolutifs
- Régression linéaire ou régression logistique
- Boosting, ensachage, ensambling
- Escalade aléatoire ou recuit simulé
- ...
Dans quels cas l'un d'eux est-il le premier choix "naturel", et quels sont les principes pour le choisir?
Exemples du type de réponses que je recherche (extrait du livre Introduction à la recherche d'informations de Manning et al. ):
une. Si vos données sont étiquetées, mais que vous n'en avez qu'une quantité limitée, vous devez utiliser un classificateur à biais élevé (par exemple, Naive Bayes) .
Je suppose que c'est parce qu'un classificateur à biais plus élevé aura une variance plus faible, ce qui est bon en raison de la petite quantité de données.
b. Si vous avez une tonne de données, le classificateur n'a pas vraiment d'importance, vous devriez donc probablement choisir un classificateur avec une bonne évolutivité.
Quelles sont les autres directives? Même les réponses comme «si vous devez expliquer votre modèle à un cadre supérieur, alors vous devriez peut-être utiliser un arbre de décision, car les règles de décision sont assez transparentes» sont bonnes. Cependant, je me soucie moins des problèmes d'implémentation / bibliothèque.
De plus, pour une question quelque peu distincte, outre les classificateurs bayésiens standard, existe-t-il des méthodes «de pointe» pour la détection du spam dans les commentaires (par opposition au spam par courrier électronique)?
Réponses:
Tout d'abord, vous devez identifier votre problème. Cela dépend du type de données dont vous disposez et de la tâche souhaitée.
Il existe différents algorithmes dans chaque approche mentionnée ci-dessus. Le choix d'un algorithme particulier dépend de la taille de l'ensemble de données.
Source: http://scikit-learn.org/stable/tutorial/machine_learning_map/
la source
La sélection de modèle utilisant la validation croisée peut être ce dont vous avez besoin.
Validation croisée
Ce que vous faites est simplement de diviser votre ensemble de données en k sous-ensembles (plis) sans chevauchement, de former un modèle à l'aide de k-1 plis et de prédire ses performances en utilisant le pli que vous avez omis. Vous faites cela pour chaque combinaison de plis possible (laissez d'abord le 1er pli, puis le 2e, ..., puis le kème et entraînez-vous avec les plis restants). Après avoir terminé, vous estimez la performance moyenne de tous les plis (peut-être aussi la variance / l'é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 la validation croisée avec un seul retrait ). 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). Vous devez simplement exécuter une validation croisée pour chaque méthode et combinaison de paramètres (5 * 10 = 50) et sélectionner le meilleur modèle, méthode et paramètres. Ensuite, vous vous entraînez avec la meilleure méthode et les meilleurs paramètres sur toutes vos données et vous avez votre modèle final.
Il y a encore des choses à dire. Si, par exemple, vous utilisez un grand nombre de méthodes et de combinaisons de paramètres pour chacune, il est très probable que vous vous sur-équiperez. Dans de tels cas, vous devez utiliser la validation croisée imbriquée .
Validation croisée imbriquée
Dans la validation croisée imbriquée , vous effectuez une validation croisée sur l'algorithme de sélection de 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 le reste comme données de test. Ensuite, vous exécutez la sélection du 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 choisissez le meilleur. Encore une fois, après avoir 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. Voilà 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.
la source
Le livre " OpenCV " a deux superbes pages à ce sujet aux pages 462-463 . La recherche dans l'aperçu Amazon du mot "discriminant" (probablement Google Books également) 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:
Boosting - souvent efficace lorsqu'une grande quantité de données d'entraînement est disponible.
Arbres aléatoires - souvent très efficaces et peuvent également effectuer une régression .
K-voisins les plus proches - la chose la plus simple que vous puissiez faire, souvent efficace mais lente et nécessite beaucoup de mémoire .
Réseaux de neurones - Entraînement lent mais très rapide à exécuter , interprète toujours optimal pour la reconnaissance des lettres .
SVM - Parmi les meilleurs avec des données limitées , mais perdant contre le boost ou les arbres aléatoires uniquement lorsque de grands ensembles de données sont disponibles.
la source
Les éléments que vous pourriez envisager pour choisir l'algorithme à utiliser comprennent:
Avez-vous besoin de vous entraîner progressivement (par opposition à la formation par 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 bayésien. Les réseaux neuronaux et SVM doivent travailler sur les données d'entraînement en une seule fois.
Vos données sont-elles uniquement catégorielles ou numériques uniquement de données , ou des deux ?
Je pense que le bayésien fonctionne mieux avec des données catégorielles / binomiales. Les arbres de décision ne peuvent pas prédire des valeurs numériques.
Est-ce que vous ou votre public devez comprendre comment fonctionne le classificateur?
Utilisez des arbres bayésiens ou décisionnels, car ceux-ci peuvent être facilement expliqués à la plupart des gens. Les réseaux de neurones et SVM sont des «boîtes noires» dans le sens où vous ne pouvez pas vraiment voir comment ils classent les données.
Combien vitesse de classification avez-vous besoin?
Les SVM sont rapides quand il s'agit de classer car ils n'ont qu'à déterminer de quel côté de la "ligne" vos données se trouvent. Les arbres de décision peuvent être lents, surtout lorsqu'ils sont complexes (par exemple, beaucoup de branches).
Complexité .
Les réseaux neuronaux et les SVM peuvent gérer une classification non linéaire complexe.
la source
Comme le dit souvent le professeur Andrew Ng: commencez toujours par implémenter un algorithme grossier et sale, puis affinez-le de manière itérative .
Pour la classification, Naive Bayes est un bon démarreur, car il a de bonnes performances, est très évolutif et peut s'adapter à presque n'importe quel type de tâche de classification. Aussi 1NN (K-Nearest Neighbors avec seulement 1 voisin) est un algorithme de meilleur ajustement sans tracas (car les données seront le modèle, et donc vous n'avez pas à vous soucier de l'ajustement de dimensionnalité de votre frontière de décision), le seul le problème est le coût de calcul (quadratique parce que vous devez calculer la matrice de distance, donc ce n'est peut-être pas un bon ajustement pour les données de grande dimension).
Un autre bon algorithme de démarrage est les forêts aléatoires (composées d'arbres de décision), il est hautement évolutif à n'importe quel nombre de dimensions et a généralement des performances tout à fait acceptables. Enfin, il existe des algorithmes génétiques , qui s'adaptent admirablement à toutes les dimensions et à toutes les données avec une connaissance minimale des données elles-mêmes, la mise en œuvre la plus minimale et la plus simple étant l' algorithme génétique microbien (une seule ligne de code C! Par Inman Harvey dans 1996), et l'un des plus complexes étant CMA-ES et MOGA / e-MOEA.
Et rappelez-vous 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.
En remarque, si vous voulez un cadre théorique pour tester vos hypothèses et les performances théoriques des algorithmes pour un problème donné, vous pouvez utiliser le cadre d'apprentissage PAC (Probablement approximativement correct) (attention: c'est très abstrait et complexe!), Mais pour En résumé, l'essentiel de l'apprentissage PAC dit que vous devez 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.
la source
Sam Roweis avait l' habitude de dire que vous devriez essayer les Bayes naïfs, la régression logistique, le plus proche voisin k et le discriminant linéaire de Fisher avant toute autre chose.
la source
Mon point de vue est que vous exécutez toujours les classificateurs de base en premier pour avoir une idée de vos données. Le plus souvent (d'après mon expérience au moins), ils ont été assez bons.
Donc, si vous avez des données supervisées, entraînez un classificateur Naive Bayes. Si vous avez des données non supervisées, vous pouvez essayer le clustering k-means.
Une autre ressource est l'une des vidéos de conférence de la série de vidéos Stanford Machine Learning , que j'ai regardée il y a quelque temps. Dans la vidéo 4 ou 5, je pense que le conférencier discute de certaines conventions généralement acceptées lors de la formation des classificateurs, des avantages / compromis, etc.
la source
Vous devez toujours tenir compte du compromis inférence vs prédiction .
Si vous souhaitez comprendre la relation complexe qui se produit dans vos données, vous devez opter pour un algorithme d'inférence riche (par exemple, régression linéaire ou lasso). D'un autre côté, si vous êtes uniquement intéressé par le résultat, vous pouvez opter pour des algorithmes de grande dimension et plus complexes (mais moins interprétables), comme les réseaux de neurones.
la source
La sélection de l'algorithme dépend du scénario et du type et de la taille de l'ensemble de données. Il existe de nombreux autres facteurs.
Ceci est une brève feuille de triche pour l'apprentissage automatique de base.
la source
Tout d'abord, cela dépend du type de problème que vous traitez, que ce soit la classification ou la régression. Choisissez ensuite judicieusement votre modèle. Cela dépend d'un modèle particulier, un modèle spécifique surpasse les autres modèles. Supposons que vous travaillez sur wine_dataset à partir de la bibliothèque sklearn et que vous avez d'abord essayé de former les données avec le noyau svm avec linéaire et que vous obtenez une sorte de précision, puis vous pensez que ce n'est pas satisfaisant, alors vous avez essayé de former vos données avec DecisionTreeClassifier () puis vous avez essayé avec RandomForestClassifier (). Après cela, quelle que soit la précision qui sera meilleure ou que vous pouvez dire que cela correspond à vos données, vous pouvez en conclure. Il y a une si petite différence syntaxique que vous trouverez tout en continuant à changer de modèle pour les tests. Alors tout va bien et comprenez bien le problème.
la source