当我尝试为我正在实现的数据挖掘方法计算逻辑函数时,我收到此错误:
RuntimeWarning: overflow encountered in exp
我的代码:
def logistic_function(x): # x = np.float64(x) return 1.0 / (1.0 + np.exp(-x))
如果我从一些相关问题中正确理解问题是np.exp()返回了一个巨大的值.我看到让numpy忽略警告的建议,但问题是当我得到这个错误时,我的方法的结果是可怕的.但是当我没有得到它时,它们就像预期的那样.所以让numpy忽略警告根本不是我的解决方案.我不知道有什么问题或者如何处理.
我甚至不知道这是否是一个错误的结果,因为有时我得到这个错误,有时不会!我多次查看我的代码,一切看起来都正确!
你应该使用任何计算的物流功能scipy.special.expit
,这在最近足够SciPy的比你的解决方案更稳定(尽管早期版本听错了),或者把它简化成tanh
:
def logistic_function(x): return .5 * (1 + np.tanh(.5 * x))
此版本的功能稳定,快速且相当准确.