Я написал следующую функцию в Python для вычисления сигмоидальной функции скаляра, вектора или матрицы.
def sigmoid(z):
sig = 1.0/(1.0 + np.exp(-z))
return sig
Для относительно больших положительных значений z, e^-z
возвращает очень маленькое значение, близкое к нулю(0) и, следовательно, значение sig округляется до 1. Моя конечная цель - определить функцию стоимости алгоритма логистической регрессии.Поскольку сигмоид возвращает ровно 1, log(1-1)
возвращает 'nan'.Как я могу решить проблему таким образом, чтобы моя функция sigmoid () вернула правильное значение, а не округлила от e^-z
до 0?
Когда я нормализовал входные функции, используя среднее и стандартное отклонение, онработал нормально.Но есть ли способ заставить его работать с большими значениями z?
Кроме того, я попробовал то же самое на Matlab, и он работал нормально без нормализации.
>>> Z = np.array([[60, 100],[20, 80]])
>>> Z
array([[ 60, 100],
[ 20, 80]])
>>> np.exp(-Z)
array([[8.75651076e-27, 3.72007598e-44],
[2.06115362e-09, 1.80485139e-35]])
>>> 1.0/(1.0 + np.exp(-Z))
array([[1., 1.],
[1., 1.]])