机器学习实战 第五章logistic回归 RuntimeWarning: overflow encountered in exp

今天在写机器学习实战第五章 程序清单5-5的程序时,遇到这个问题:

RuntimeWarning: overflow encountered in exp
  return 1.0/(1 + np.exp(-x))

原因在于sigmoid函数,当x是一个非常小的负数时,exp(-x)会过大,导致溢出,下面进行优化:
**原式分子分母同乘exp(x)**这个很小的数(原式大小不变),可以防止数据溢出

优化前:

def sigmoid(x):
    return 1.0/(1 + np.exp(-x))

优化后:

def sigmoid(x):
    '''
    当x是一个非常小的负数时,exp(-x)会过大,导致溢出,下面进行优化:
    原式分子分母同乘exp(x)这个很小的数,可以防止数据溢出
    '''
    if x >= 0:
        return 1.0/(1 + np.exp(-x))
    else:
        return np.exp(x)/(1 + np.exp(x))

你可能感兴趣的:(python,python,RuntimeWarning)