Question

J'utilise un classificateur Naive Bayes pour classer plusieurs milliers de documents dans 30 catégories différentes. Je l'ai mis en place un Naive Bayes Classifier, et une sélection de fonction (filtrage des mots inutiles pour la plupart), j'ai obtenu sur une précision de test de 30%, avec 45% de précision de formation. Ce chiffre est nettement meilleur que aléatoire, mais je veux que ce soit mieux.

Je l'ai essayé avec la mise en œuvre AdaBoost Nouveau-Brunswick, mais il ne semble pas donner des résultats sensiblement meilleurs (la littérature semble divisée sur ce point, certains journaux disent AdaBoost avec NB ne donne pas de meilleurs résultats, d'autres). Est-ce que vous connaissez des autres extensions au Nouveau-Brunswick qui peuvent éventuellement donner une meilleure précision?

Était-ce utile?

La solution

Dans mon expérience, bien Naive Bayes classificateurs formés sont généralement étonnamment précis (et très rapide pour former - sensiblement plus rapide que tout constructeur classificateur-je ai everused).

donc quand vous voulez améliorer la prédiction de classificateur, vous pouvez regarder dans plusieurs endroits:

  • régler votre classificateur (réglage accordables paramaters du classificateur);

  • appliquer une sorte de technique de combinaison classificateur (par exemple, ensembling, stimulant, mise en sac); ou vous pouvez

  • regard à les données amenée au classificateur - soit ajouter plus de données, améliorer votre analyse de base, ou affiner les fonctionnalités que vous sélectionnez à partir les données.

w / r / t classificateurs de Bayes naïf, le réglage des paramètres est limité; Je recommande de se concentrer sur vos données - à savoir, la qualité de votre pré-traitement et la sélection des fonctions.

I. Parsing données (pré-traitement)

Je suppose que vos données brutes est quelque chose comme une chaîne de texte brut pour chaque point de données, qui, par une série d'étapes de traitement vous transformez chaque chaîne dans un vecteur structuré (tableau 1D) pour chaque point de données de telle sorte que chaque décalage correspond à une fonction (généralement un mot) et la valeur de ce décalage correspond à la fréquence.

  • provenant : soit manuellement, soit en utilisant une bibliothèque issue? les populaires les open-source sont Porter, Lancaster et boule de neige. Donc pour par exemple, si vous avez les termes programmeur, programme, Progamming, programmé dans un point de données donné, un STEMMER les réduire à un tige unique (probablement programme ) de sorte que votre vecteur terme pour que les données le point aura une valeur de 4 pour le programme de fonction, qui est probablement ce que vous voulez.

  • recherche des synonymes : même idée que découle - plier mots connexes en un seul mot; si un chercheur de synonymes peut identifier développeur, programmeur, codeur et ingénieur logiciel et rouler les en un seul terme

  • mots neutres : mots avec des fréquences similaires dans les classes font caractéristiques pauvres

II. Sélection Caractéristique

considérer un cas d'utilisation prototypique pour NBCs: filtrage anti-spam; vous pouvez rapidement voir comment il échoue et tout aussi rapidement, vous pouvez voir comment l'améliorer. Par exemple, les filtres anti-spam ci-dessus de la moyenne ont des caractéristiques nuancées comme: la fréquence des mots en majuscules, la fréquence des mots dans le titre, et l'apparition du point d'exclamation dans le titre. En outre, les meilleures caractéristiques sont souvent simples mots, mais par exemple, des paires de mots ou groupes de mots plus grands .

III. Spécifique classificateur Optimisations

Au lieu de 30 classes utilisent un d'un contre-many "système - en d'autres termes, vous commencez par un classificateur à deux classes (classe A et 'tout') puis les résultats dans le « tout » de classe sont retournés à l'algorithme de classification en classe B et « tout le reste », etc.

La méthode Fisher (probablement la façon la plus commune pour optimiser un classificateur Naive Bayes). Pour moi, je pense à Fisher comme normalisant (plus correctement, normalisation ) les probabilités d'entrée Une NBC utilise les probabilités de fonctionnalités pour construire une probabilité 'tout-document'. La méthode Fisher calcule la probabilité d'une catégorie pour chaque caractéristique du document combine ensuite ces probabilités de caractéristiques et compare cette probabilité combinée avec la probabilité d'un ensemble de caractéristiques aléatoires.

Autres conseils

Je suggère d'utiliser un SGDClassifier comme ce et syntonisez en termes de force de régularisation.

Essayez aussi de régler la formule TFIDF que vous utilisez en réglant les paramètres de TFIFVectorizer .

  • Je vois généralement que pour des problèmes de classification texte ou SVM Logistique Regressioin lorsque formé un contre-tous surclasse NB. Comme vous pouvez le voir dans cet article agréable par les gens de Stanford pour les documents plus de SVM NB. Le code pour le papier qui utilise une combinaison de SVM et NB ( NBSVM ) est ici .

  • Deuxièmement, accordez votre formule TFIDF (par exemple sublinéaire tf, smooth_idf).

  • Normaliser vos échantillons avec ou normalisation l2 l1 (par défaut dans Tfidfvectorization) car il compense les différentes longueurs de document.

  • Multilayer Perceptron , obtient généralement de meilleurs résultats que NB ou SVM en raison de la non-linéarité introduit qui est inhérente à de nombreux problèmes de classification texte. Je l'ai mis en place un très parallèle à l'aide Théano / Lasagne qui est facile à utiliser et téléchargeable .

  • Essayez de réglez votre l1 / l2 / régularisation elasticnet . Cela fait une énorme différence dans SGDClassifier / SVM / régression logistique.

  • essayer d'utiliser n-grammes qui est configurable en tfidfvectorizer.

  • Si vos documents ont une structure (par exemple avoir titres ) envisager d'utiliser des fonctionnalités différentes pour différentes parties. Par exemple ajouter title_word1 à votre document si word1 se passe dans le titre du document.

  • Pensez à utiliser la longueur du document comme une caractéristique (par exemple nombre de mots ou caractères).

  • Envisagez d'utiliser méta-informations sur le document (par exemple le temps de la création, le nom de l'auteur, l'URL du document, etc.).

  • Récemment Facebook FastText code de classification qui fonctionne très bien dans de nombreuses tâches, assurez-vous de l'essayer.

Utilisation de la correction Laplacien avec AdaBoost.

AdaBoost, d'abord un poids est attribué à chaque tuple de données dans l'ensemble de données d'entraînement. Les poids intial sont fixés selon la méthode de init_weights, qui initialise chaque poids à être 1/d, où d est la taille de l'ensemble de données d'apprentissage.

Ensuite, une méthode de generate_classifiers est appelée, qui fonctionne k fois, la création d'instances de k du classificateur Naïf Bayes. Ces classificateurs sont ensuite pondérées et les données de test est exécuté sur chaque classificateur. La somme des votes pondérés « » des classificateurs constitue le classement final.

en gardant la taille n petit NB font aussi de donner suite haute précision. et à la base, comme la taille de n augmenter sa dégradation de la précision,

Sélectionner les fonctionnalités qui ont moins de corrélation entre eux. Et essayez d'utiliser différentes combinaisons de fonctions à la fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top