【问题标题】:RuntimeWarning: overflow encountered in exp in computing the logistic functionRuntimeWarning:在计算逻辑函数时遇到溢出
【发布时间】:2014-10-07 00:02:32
【问题描述】:

当我尝试为我正在实施的数据挖掘方法计算逻辑函数时出现此错误:

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 忽略警告对我来说根本不是解决方案。我不知道出了什么问题或如何处理。

我什至不知道这是否是错误的结果,因为有时我会收到此错误,有时不会!我多次检查了我的代码,一切看起来都是正确的!

【问题讨论】:

  • 您只是想计算太大而无法放入 8 个字节(浮点 64)的数字。解决方案:过滤数据以获得足够小的有意义的值。

标签: python numpy scipy


【解决方案1】:

您应该使用scipy.special.expit 来计算逻辑函数,这在最近的 SciPy 中 比您的解决方案更稳定(尽管早期版本出错了),或者将其减少到 tanh

def logistic_function(x):
    return .5 * (1 + np.tanh(.5 * x))

此版本的函数稳定、快速且相当准确。

【讨论】:

  • x 可能是非常负面的,试试这个来重现警告:np.exp(1e3)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多