J'essaierai de répondre à cette question avec une combinaison de preuves publiées, d'expérience personnelle et de spéculations.
A) Preuve publiée.
Le seul document que je connaisse qui aide à répondre à la question est Delgado et al 2014 - Avons-nous besoin de centaines de classificateurs pour résoudre les problèmes de classification du monde réel? - JMLR qui exécute des centaines d'algorithmes et d'implémentations différents sur 121 jeux de données pour l'UCI. Ils constatent que même si RBF SVM n'est pas le "meilleur" algorithme (ce sont des forêts aléatoires si je me souviens bien), il est parmi les 3 premiers (ou 5).
Si vous considérez que leur sélection de jeux de données est un "bon échantillon" de problèmes du monde réel, alors SVM est définitivement un algorithme qui devrait être essayé sur de nouveaux problèmes, mais il faut d'abord essayer la forêt aléatoire!
Les limites de la généralisation de ce résultat sont que les ensembles de données sont presque tous grands et maigres (n >> p), pas très clairsemés - ce qui, je suppose, devrait être plus problématique pour RF, et pas très gros (à la fois n et p).
Enfin, toujours sur la base des données publiées, je recommande deux sites qui comparent différentes implémentations de forêts aléatoires:
B) Expérience personnelle.
Je pense que des articles tels que Delgado et tous très importants pour la communauté du machine learning, j'ai donc essayé de reproduire leurs résultats dans des conditions différentes. J'ai exécuté une quinzaine d'algorithmes différents sur plus de 100 jeux de données binaires (à partir de l'ensemble de jeux de données de Delgado). Je pense aussi que j'étais plus prudent sur la sélection des hyperparamètres qu'ils ne l'étaient.
Mes résultats sont que le SVM était le "meilleur algorithme" (rang moyen 4.9). Mon opinion est que SVM a passé RF parce que le jeu de données d'origine contenait de nombreux problèmes multiclasses - dont je parlerai dans la partie spéculation - devrait être un problème pour SVM.
EDIT (16 juin):
Mais la RF est bien plus rapide, et c'était le 2ème meilleur algorithme (rang moyen 5,6) suivi de gbm (5,8), des réseaux (7,2), etc.). Je n'ai pas essayé la régression logistique standard dans ces problèmes, mais j'ai essayé un filet élastique (L1 et L2 régularisé LR) mais il n'a pas bien fonctionné (rang moyen 8.3) ~
Je n'ai pas encore fini d'analyser les résultats ou d'écrire le papier, je ne peux même pas pointer vers un rapport technique avec les résultats. J'espère que dans quelques semaines je pourrai rééditer cette réponse et pointer vers un rapport technique avec les résultats.
Le document est disponible à http://arxiv.org/abs/1606.00930 Il s'avère qu'après l'analyse complète, RF et SVM sont presque équivalents en termes de taux d'erreur attendu et SVM est le plus rapide (à ma grande surprise !!). Je ne suis plus aussi catégorique en recommandant RF (pour des raisons de vitesse).
Donc, mon expérience personnelle est que bien que SVM puisse vous apporter un peu plus de précision, c'est presque toujours un meilleur choix pour utiliser un RF.
Également pour des problèmes plus importants, il peut être impossible d'utiliser un solveur SVM par lots (je n'ai jamais utilisé de solveur SVM en ligne tel que LASVM ou autres).
Enfin, je n'ai utilisé la régression logistique que dans une seule situation. Je faisais une ingénierie de fonctionnalité "intense" sur un problème de classification d'image (comme - combiner ou non deux descriptions différentes de l'image et la dimensionnalité des descriptions). Et j'ai utilisé la régression logistique pour sélectionner parmi les nombreuses alternatives (car il n'y a pas de recherche d'hyperparamètre dans LR). Une fois que nous nous sommes installés dans les meilleures caractéristiques (selon LR), nous avons utilisé un RF (sélection pour les meilleurs hyperparamètres) pour obtenir le classificateur final.
C) Spéculation
Je n'ai jamais sérieusement travaillé sur les problèmes multiclasses, mais j'ai le sentiment que les SVM ne sont pas si bons avec eux. Le problème n'est pas le problème entre les solutions un contre un ou un contre tous, mais que toutes les implémentations que je connais, utiliseront les mêmes hyperparamètres pour tous les classificateurs (OVO ou OVA). La sélection des hyperparamètres corrects pour SVM est si coûteuse qu'aucune des implémentations standard que je connais ne fera une recherche pour chaque classificateur. Je suppose que c'est un problème pour SVM (mais pas un problème pour RF !!).
Là encore, pour les problèmes multiclasses, j'irais directement à RF.
Je n'ai pas les privilèges suffisants pour être en mesure d'écrire des commentaires, donc je vais simplement fournir mes commentaires / observations ici comme réponse.
D'après mon expérience, les classificateurs de vecteur de support (SVC) ont tendance à être au pair ou à surpasser les autres méthodes lorsque les classes binaires sont équilibrées. Pour les classes déséquilibrées, SVC a tendance à mal fonctionner.
Je ne traite pas souvent les problèmes de multiclasses, mais j'ai également vu de bons résultats avec SVC pour les problèmes de multiclasses.
Une autre chose que j'ai remarquée est que la malédiction de la dimensionnalité ne semble pas affecter autant le SVC que les autres techniques de modélisation. En d'autres termes, comme j'ajoute plus de termes dans le modèle, les autres techniques commencent à mal fonctionner sur l'ensemble de test (ou de maintien) par rapport à l'ensemble d'entraînement. Mais pas tellement quand j'utilise SVC. Pour cette raison, si la parcimonie du modèle n'est pas votre priorité, alors SVC peut être une meilleure option car vous pouvez utiliser beaucoup de termes sans trop de sur-ajustement que les autres méthodes.
L'un des problèmes que j'ai avec SVC est qu'il ne fournit pas implicitement une mesure (comme la probabilité prédite) pour pouvoir classer les observations par ordre de classement. Vous pouvez utiliser Platt Scaling (implémenté dans le package sklearn.svm en Python), mais j'ai vu quelques incohérences. (Je peux partager les détails si quelqu'un est intéressé.)
Je ne sais pas si cela répond vraiment à votre question, mais ce sont mes observations. J'espère que ça t'as aidé.
la source
RF et (RBF) SVM ont des théories différentes derrière eux, mais en supposant que vous avez suffisamment de données, ils fonctionnent de manière similaire. Ils peuvent tous deux apprendre des fonctions complexes et bien gérer les variables et les valeurs aberrantes et non informatives.
Si vous essayez d'obtenir les meilleurs résultats pour quelque chose comme un kaggle, vous devez de toute façon regrouper plusieurs modèles, y compris RF et SVM.
Dans les paramètres non kaggle, vous pourriez considérer à quel point il est difficile d'implémenter le modèle, de le mettre en production, de faire une prédiction, d'interpréter, de l'expliquer à un gestionnaire, etc.
SVM (RBF linéaire ou hautement régularisé) serait certainement préféré si vous avez une petite quantité de données ou si vous avez affaire à un cours de dimensionnalité. Il y a deux raisons à cela, l'une est qu'il vaut mieux rechercher un hyperplan à marge maximale plutôt qu'une série de meilleures divisions sur vos entités, il n'y a généralement pas non plus besoin d'une frontière complexe car dans un espace de grande dimension, il y aura un hyperplan qui peut de toute façon séparer les données. Un autre problème est que la RF est plus difficile à régler (a plus de paramètres à régler), vous avez donc besoin de plus de données.
Une autre réflexion, la validation croisée peut être très bon marché et rapide pour SVM, en particulier LOOCV. Étant donné que seuls quelques échantillons sont des vecteurs de support (pas toujours), vous n'avez pas à recycler votre classificateur à chaque fois, mais uniquement lorsque les données qui sont maintenant dans l'ensemble de test étaient des vecteurs de support auparavant. Cela peut également faciliter l'apprentissage en ligne.
En outre, il peut être moins coûteux de stocker des vecteurs de support que des arbres complets.
Il est souvent préférable de faire un modèle probabiliste que de classifier. Alors, faites d'abord le modèle et la décision plus tard. Dans ce cas, la régression logistique sera préférée. Et vous pouvez toujours utiliser les noyaux et la régularisation pour le faire se comporter comme vous le souhaitez. De plus, vous n'utiliserez pas la RF pour répondre à des questions telles que: correction pour l'âge, le mode de vie, le sexe et l'éducation, la consommation d'alcool augmente-t-elle les risques de teinture d'une crise cardiaque?
Quelques ressources supplémentaires que j'ai trouvées intéressantes: https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms http://videolectures.net/solomon_caruana_wslmw/
la source