Implementazione di Bayes Naive complementari in Python?


9

Problema

Ho provato a usare Naive Bayes su una serie di dati etichettati di dati sulla criminalità, ma ho ottenuto risultati davvero scarsi (precisione del 7%). Naive Bayes corre molto più velocemente degli altri alogoritmi che ho usato, quindi volevo provare a scoprire perché il punteggio era così basso.

Ricerca

Dopo aver letto ho scoperto che i bay Naive dovrebbero essere usati con set di dati bilanciati perché ha una propensione per le classi con frequenza più alta. Dal momento che i miei dati sono sbilanciati, ho voluto provare a utilizzare le Naive Bayes complementari, poiché sono state create appositamente per gestire le inclinazioni dei dati. Nel documento che descrive il processo, l'applicazione è per la classificazione del testo ma non vedo perché la tecnica non funzioni in altre situazioni. Puoi trovare il documento a cui mi riferisco qui . In breve, l'idea è quella di utilizzare i pesi in base alle occorrenze in cui una classe non viene visualizzata.

Dopo aver fatto qualche ricerca sono stato in grado di trovare un'implementazione in Java, ma sfortunatamente non conosco Java e non capisco l'algoritmo abbastanza bene da implementare me stesso.

Domanda

dove posso trovare un'implementazione in Python? Se ciò non esiste, come dovrei implementarlo da solo?

Risposte:


5

Naive Bayes dovrebbe essere in grado di gestire set di dati non bilanciati. Ricordiamo che la formula di Bayes è

P(yx)=P(xy)P(y)P(x)P(xy)P(y)

P(xy)P(y)P(y)

Nel tuo caso forse ti alleni e hai bisogno di un po 'di smoothing? Puoi iniziare con il livellamento +1 e vedere se offre miglioramenti. In Python, usando numpy, implementerei il smoothing in questo modo:

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

Nota che questo ti dà Bayes naive multinomiali - che si applica solo ai dati categorici.

Posso anche suggerire il seguente link: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Si tratta di implementare Naive Bayes su Apache Flink. Mentre è Java, forse ti darà qualche teoria di cui hai bisogno per capire meglio l'algoritmo.


Potresti aver ragione, sembra che l'ingenuo Bayes abbia solo il problema dello squilibrio con la classificazione del testo. Puoi spiegare cos'è il livellamento?
cavalletta,

P(xy)x

0

La mia implementazione del complemento Naive Bayes in scikit-learn può essere trovata qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.