Мне нужны функции logit и обратного logit, чтобы logit (inv_logit ( n)) == n
. Я использую numpy, и вот что у меня есть:
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))
И вот значения:
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
Теперь давайте проверим отрицательные числа
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
Итак, мои вопросы: как правильно реализовать эти функции, чтобы требование logit (inv_logit (n)) == n
будет выполняться для любого n
в максимально широком диапазоне (по крайней мере [-1e4; 1e4)?
А также (и я я уверен, что это связано с первым), почему моя функция более стабильна с отрицательными значениями по сравнению с положительными?