Ich habe an vielen Stellen (z. B. hier und hier ) über den Log-Sum-Exp-Trick gelesen , aber noch nie ein Beispiel dafür gesehen, wie er speziell auf den Naive Bayes-Klassifikator angewendet wird (z. B. mit diskreten Merkmalen und zwei Klassen).
Wie genau würde man mit diesem Trick das Problem des numerischen Unterlaufs vermeiden?
naive-bayes
underflow
Josh
quelle
quelle
Antworten:
In
Sowohl der Nenner als auch der Zähler können sehr klein werden, typischerweise weil nahe 0 sein kann und wir viele von ihnen miteinander multiplizieren. Um Unterläufe zu vermeiden, kann man einfach das Protokoll des Zählers nehmen, aber man muss den log-sum-exp-Trick für den Nenner verwenden.p(xi|Ck)
Genauer gesagt, um Unterläufe zu verhindern:
Wenn wir nur zu wissen , welche Klasse Pflege der Eingang ( x = x 1 , ... , x n ) höchstwahrscheinlich gehört mit dem Maximum a posteriori (MAP) Entscheidungsregel, müssen wir nicht die Log- gelten Summen-Exp-Trick, da wir in diesem Fall den Nenner nicht berechnen müssen . Für den Zähler kann man einfach das Protokoll nehmen, um Unterläufe zu vermeiden: l o g ( p ( x | Y = C ) p ( Y = C ) )(y^) (x=x1,…,xn) log(p(x|Y=C)p(Y=C)) . Genauer:
was wird, nachdem das Protokoll genommen wurde:
If we want to compute the class probabilityp(Y=C|x) , we will need to compute the denominator:
The elementlog( ∑|C|k=1p(x|Y=Ck)p(Y=Ck)) may underflow because p(xi|Ck) can be very small: it is the same issue as in the numerator, but this time we have a summation inside the logarithm, which prevents us from transforming the p(xi|Ck) (can be close to 0) into log(p(xi|Ck)) (negative and not close to 0 anymore, since 0≤p(xi|Ck)≤1 ). To circumvent this issue, we can use the fact that p(xi|Ck)=exp(log(p(xi|Ck))) to obtain:
At that point, a new issue arises:log(p(x|Y=Ck)p(Y=Ck)) may be quite negative, which implies that exp(log(p(x|Y=Ck)p(Y=Ck))) may become very close to 0, i.e. underflow. This is where we use the log-sum-exp trick:
with:
We can see that introducing the variableA avoids underflows. E.g. with k=2,a1=−245,a2=−255 , we have:
Using the log-sum-exp trick we avoid the underflow, withA=max(−245,−255)=−245 :
log∑keak=log∑keakeA−A=A+log∑keak−A=−245+log∑keak+245=−245+log(e−245+245+e−255+245)=−245+log(e0+e−10)
We avoided the underflow sincee−10 is much farther away from 0 than 3.96143×10−107 or 1.798486×10−111 .
quelle
Suppose we want to identify which of two databases is more likely to have generated a phrase (for example, which novel is this phrase more likely to have come from). We could assume independence of the words conditional on the database (Naive Bayes assumption).
Now look up the second link you have posted. Therea would represent the joint probability of observing the sentence given a database and the ebt s would represent the probability of observing each of the words in the sentence.
quelle