Il modello di evento di NB multinomiale è questo:
P (x1, x2 ... Xm | y = k) = P (x1 | = k) * P (x2 | y = k) * ... * P (xm | y = k),
dove x è la parola nel documento. Quindi lo applichiamo al modello bag of words. P = P (x1 | y = k) ^ n1 * P (x2 | y = k) ^ n2 * ... * P (xm | y = k) ^ nm. La xi è l'ultima parola nel dizionario, ni è la frequenza nel documento.
Bene, ho qualche problema con esso
-
se tutti i ni sono 0, allora la probabilità diventa 1, poiché x ^ 0 è 1. Questo è strano coz tutto il documento vuoto ha 1 probabilità.
-
Quando un documento contiene molti 'buy', dovrebbe essere identificato come spam ma l'esponenziale rende P ('buy' | y = 'spam') ^ n veramente piccolo, quindi il documento contiene meno 'buy' ha una maggiore probabilità di spam?
-
l'algoritmo MNB può essere implementato in 60 righe di codice Python (usando operazioni con matrice densa) e in realtà non può funzionare bene come il problema di classificazioni come "10 o più classi". Il risultato della classificazione dei "20news dati con tutte le classi" mi ha dato un'accuratezza del 42%. Beh, non sono sorpreso, visto che ha i problemi che ho citato.