Ich konstruiere einen Naive Bayes Textklassifizierer von Grund auf neu in Python und mir ist bewusst, dass ein Logarithmus über die Wahrscheinlichkeiten ein gutes ist, wenn man ein Produkt von sehr kleinen Wahrscheinlichkeiten trifft Wahl.Komplikation mit Log-Wahrscheinlichkeiten - Naive Bayes Textklassifizierer
Das Problem jetzt ist, dass die mathematische Funktion, die ich verwende, eine Summierung über ein Produkt dieser extrem kleinen Wahrscheinlichkeiten hat.
Um genau zu sein, ich versuche, die gesamten Wortwahrscheinlichkeiten für eine Mischung Komponente (Klasse) über alle Klassen zu berechnen.
Die Protokolle dieser Gesamtwahrscheinlichkeiten einfach zu addieren ist falsch, da das Protokoll einer Summe nicht der Summe der Protokolle entspricht.
Um ein Beispiel zu geben, lassen Sie uns sagen, dass ich 3 Klassen, 2000 Wörter und 50 Dokumente habe. Dann habe ich ein Wort Wahrscheinlichkeitsmatrix namens Wordprob mit 2000 Zeilen und 3 Spalten.
Der Algorithmus für die gesamte Wortwahrscheinlichkeit in diesem Beispiel würde wie folgt aussehen:
sum = 0
for j in range(0,3):
prob_product = 1
for i in words: #just the index of words from my vocabulary in this document
prob_product = prob_product*wordprob[i,j]
sum = sum + prob_product
Was am Ende passiert ist, dass prob_product 0 auf vielen Iterationen wird durch viele kleine Wahrscheinlichkeiten miteinander multiplizieren.
Da ich das mit logs nicht so einfach lösen kann (wegen der summierung vorne) bin ich total ratlos.
Jede Hilfe wird sehr geschätzt.
NumPy hat eine ['logaddexp'-Funktion] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.logaddexp.html) für genau diesen Zweck. –
(Und 'scipy.misc.logsumexp' könnte auch von Interesse sein.) –