Implementazione di Naive Bayes


10

Sto implementando un algoritmo Naive Bayes per la categorizzazione del testo con il livellamento di Laplacian. Il problema che sto riscontrando è che la probabilità si avvicina allo zero perché sto moltiplicando molte piccole frazioni. Pertanto, la probabilità alla fine produce zero. Questo perché ci sono diverse parole nei documenti e nei set di addestramento.

Per questo motivo, non sono in grado di classificare i testi. C'è un modo per aggirare questo problema? Sto facendo qualcosa di sbagliato nella mia implementazione?


... Potresti evitare l'aritmetica in virgola mobile.

Risposte:


14

Il solito trucco per evitare questo underflow è calcolare i logaritmi, usando l'identità Cioè, invece di usare le probabilità, usi i loro logaritmi. Invece di moltiplicarli, li aggiungi.

logi=1npi=i=1nlogpi.

Un altro approccio, che non è così comune, è la normalizzazione manuale del prodotto. Invece di mantenere solo un numero in virgola mobile , si mantiene un numero in virgola mobile (diciamo) e un esponente negativo tale che . Dopo ogni operazione si normalizza il numero risultante.pp0[1,2)xp=p02x


2
È anche utile notare il trucco di logsumexp in questo contesto: en.wikipedia.org/wiki/LogSumExp
Bitwise
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.