Implémentation de Bayes Naive complémentaires en python?

9

Problème

J'ai essayé d'utiliser des baies naïves sur un ensemble de données étiquetées de données sur la criminalité, mais j'ai obtenu de très mauvais résultats (précision de 7%). Naive Bayes fonctionne beaucoup plus rapidement que les autres alogorithmes que j'utilise, donc je voulais essayer de savoir pourquoi le score était si bas.

Recherche

Après avoir lu, j'ai découvert que les bayés naïfs devraient être utilisés avec des jeux de données équilibrés car ils ont un biais pour les classes avec une fréquence plus élevée. Étant donné que mes données sont déséquilibrées, je voulais essayer d'utiliser le complément Naive Bayes car il est spécialement conçu pour traiter les asymétries de données. Dans l'article qui décrit le processus, l'application est destinée à la classification de texte, mais je ne vois pas pourquoi la technique ne fonctionnerait pas dans d'autres situations. Vous pouvez trouver le document auquel je fais référence ici . En bref, l'idée est d'utiliser des poids basés sur les occurrences où une classe n'apparaît pas.

Après avoir fait quelques recherches, j'ai pu trouver une implémentation en Java mais malheureusement je ne connais aucun Java et je ne comprends pas assez bien l'algorithme pour m'implémenter.

Question

où puis-je trouver une implémentation en python? Si cela n'existe pas, comment dois-je procéder pour l'implémenter moi-même?

sauterelle
la source

Réponses:

5

Naive Bayes devrait être capable de gérer des ensembles de données déséquilibrés. Rappelons que la formule de Bayes est

P(yX)=P(Xy)P(y)P(X)P(Xy)P(y)

P(Xy)P(y)P(y)

Dans votre cas, peut-être que vous êtes trop habillé et avez besoin d'un peu de lissage? Vous pouvez commencer avec le lissage +1 et voir si cela apporte des améliorations. En python, lors de l'utilisation de numpy, j'implémenterais le lissage de cette façon:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Notez que cela vous donne Multinomial Naive Bayes - qui ne s'applique qu'aux données catégorielles.

Je peux également suggérer le lien suivant: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Il s'agit d'implémenter Naive Bayes sur Apache Flink. Bien que ce soit Java, cela vous donnera peut-être une théorie dont vous avez besoin pour mieux comprendre l'algorithme.

Alexey Grigorev
la source
Vous avez peut-être raison de penser que Bayes naïf n'a que le problème de déséquilibre avec la classification des textes. Pouvez-vous expliquer ce qu'est le lissage?
sauterelle
P(Xy)X
0

Mon implémentation de Complement Naive Bayes dans scikit-learn se trouve ici .

airalcorn2
la source