web-dev-qa-db-fra.com

Naive Bayes vs SVM pour classer les données texte

Je travaille sur un problème qui implique la classification d'une grande base de données de textes. Les textes sont très courts (pensez à 3-8 mots chacun) et il y a 10-12 catégories dans lesquelles je souhaite les trier. Pour les fonctionnalités, j'utilise simplement la fréquence tf – idf de chaque mot. Ainsi, le nombre de fonctionnalités est à peu près égal au nombre de mots qui apparaissent globalement dans les textes (je supprime les mots vides et quelques autres).

En essayant de trouver un modèle à utiliser, j'ai eu les deux idées suivantes:

  • Naive Bayes (probablement l'implémentation multinomiale skive de Naive Bayes)
  • Prise en charge de la machine vectorielle (avec descente de gradient stochastique utilisée dans la formation, également une implémentation Sklearn)

J'ai construit les deux modèles et je compare actuellement les résultats.

Quels sont les avantages et les inconvénients théoriques de chaque modèle? Pourquoi l'un d'entre eux pourrait-il être meilleur pour ce type de problème? Je suis nouveau dans l'apprentissage automatique, donc ce que j'aimerais comprendre c'est pourquoi on pourrait faire mieux.

Merci beaucoup!

15
Ryan

La plus grande différence entre les modèles que vous construisez du point de vue des "fonctionnalités" est que Naive Bayes les traite comme indépendants, tandis que SVM examine les interactions entre eux dans une certaine mesure, tant que vous utilisez un non noyau linéaire (gaussien, rbf, poly etc.). Donc, si vous avez des interactions et, compte tenu de votre problème, vous en avez probablement, un SVM sera meilleur pour les capturer, donc mieux pour la tâche de classification que vous souhaitez.

Le consensus pour les chercheurs et les praticiens du ML est que dans presque tous les cas, le SVM est meilleur que le Naive Bayes.

D'un point de vue théorique, il est un peu difficile de comparer les deux méthodes. L'un est de nature probabiliste, tandis que le second est géométrique. Cependant, il est assez facile de trouver une fonction où l'on a des dépendances entre des variables qui ne sont pas capturées par Naive Bayes (y (a, b) = ab), donc nous savons que ce n'est pas un approximateur universel. Les SVM avec le bon choix de noyau sont (tout comme les réseaux neuronaux à 2/3 couches), donc, de ce point de vue, la théorie correspond à la pratique.

Mais en fin de compte, cela revient aux performances sur votre problème - vous voulez essentiellement choisir la méthode la plus simple qui donnera suffisamment de résultats pour votre problème et avoir des performances suffisamment bonnes . La détection du spam a été notoirement résolu par seulement Naive Bayes, par exemple. Reconnaissance des visages dans les images par une méthode similaire améliorée avec un renforcement, etc.

21
Horia Coman
  • La prise en charge de Vector Machine (SVM) est meilleure pour le contenu complet.
  • Multinomial Naive Bayes (MNB) est meilleur aux extraits de code.

MNB est plus fort pour les extraits que pour les documents plus longs. Alors que (Ng et Jordan, 2002) ont montré que NB est meilleur que SVM/régression logistique (LR) avec peu de cas d'entraînement, MNB est également meilleur avec des documents courts. SVM bat généralement NB lorsqu'il a plus de 30 à 50 cas d'entraînement, nous montrons que MNB est encore meilleur sur les extraits de code, même avec des ensembles d'entraînement relativement importants (9 000 cas).

Bref, NBSVM semble être une base de référence appropriée et très solide pour les données de texte de classification sophistiquées.

Code source: https://github.com/prakhar-agarwal/Naive-Bayes-SVM

Référence: http://nlp.stanford.edu/pubs/sidaw12_simple_sentiment.pdf

Citer: Wang, Sida et Christopher D. Manning. "Baselines and bigrams: Simple, good feeling and topic classification." Actes de la 50e réunion annuelle de l'Association for Computational Linguistics: Short Papers-Volume 2. Association for Computational Linguistics, 2012.

4
Prakhar Agarwal