2014-10-06 98 views
4

我得到這個錯誤,當我試圖來計算,我實現數據挖掘方法的邏輯功能:RuntimeWarning:溢出EXP遇到計算物流功能

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忽略這個警告對我來說根本不是一個解決方案。我不知道什麼是錯的或如何處理。

我甚至不知道這是否是一個錯誤的結果,因爲有時我得到這個錯誤,有時候不是!我經歷了很多次我的代碼,一切都看起來正確!

+0

你只是試圖計算太大而不適合8個字節的數字(float 64)。解決方案:過濾您的數據以獲得足夠小的值,這是合理的。 – sebix 2014-10-06 15:30:16

回答

9

您應該計算使用或者scipy.special.expit物流功能,近足夠SciPy的比解決方案更穩定(儘管早期版本聽錯了),或者把它簡化成tanh

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

該版本的功能穩定,快速且相當準確。

+1

指數函數如何可能不穩定? – Martian2049 2016-02-02 06:06:59

+1

'x'可能非常消極,請嘗試重現警告:'np.exp(1e3)' – zyxue 2017-04-29 00:45:28