logit-und inverse logit-Funktionen für extreme Werte

Brauche ich logit-und inverse logit-Funktionen, so dass logit(inv_logit(n)) == n. Ich benutze numpy und hier ist was ich habe:

import numpy as np
def logit(p):
    return np.log(p) - np.log(1 - p)

def inv_logit(p):
    return np.exp(p) / (1 + np.exp(p))

Und hier sind die Werte:

print logit(inv_logit(2)) 
2.0 

print logit(inv_logit(10))
10.0 

print logit(inv_logit(20))
20.000000018 #well, pretty close

print logit(inv_logit(50))
Warning: divide by zero encountered in log
inf 

Nun testen wir, negative zahlen

print logit(inv_logit(-10))
-10.0 
print logit(inv_logit(-20))
-20.0 
print logit(inv_logit(-200))
-200.0 
print logit(inv_logit(-500))
-500.0 
print logit(inv_logit(-2000))
Warning: divide by zero encountered in log
-inf 

Also meine Fragen sind: was ist der richtige Weg, um diese Funktionen zu implementieren, so dass die Anforderung logit(inv_logit(n)) == n halten für jeden n so weit reichen wie möglich (mindestens [-1e4; 1e4)?

Und auch (und ich bin sicher, dies ist mit dem ersten verbunden), warum sind meine Funktion, mehr stabil mit negativen Werten im Vergleich zu den positiven?

Schreibe einen Kommentar