這些函式已經存在於scipy中。sigmoid函式可用作^{}。in [36]: from scipy.special import expit
將expit與向量化乙狀結腸功能進行比較:in [38]: x = np.linspace(-6, 6, 1001)
in [39]: %timeit y = sigmoid(x)
100 loops, best of 3: 2.4 ms per loop
in [40]: %timeit y = expit(x)
10000 loops, best of 3: 20.6 µs per loop
expit也比自己實現公式快:in [41]: %timeit y = 1.0 / (1.0 + np.exp(-x))
10000 loops, best of 3: 27 µs per loop
logistic分布的cdf是乙狀結腸的功能。它可用作scipy.stats.logistic的cdf方法,但cdf最終呼叫expit,因此使用該方法沒有意義。您可以使用pdf方法計算sigmoid函式的導數,也可以使用_pdf方法計算sigmoid函式的導數,該方法開銷較小,但「自己滾動」速度更快:in [44]: def sigmoid_grad(x):
....: ex = np.exp(-x)
....: y = ex / (1 + ex)**2
....: return y
計時(x的長度為1001):in [45]: from scipy.stats import logistic
in [46]: %timeit y = logistic._pdf(x)
10000 loops, best of 3: 73.8 µs per loop
in [47]: %timeit y = sigmoid_grad(x)
10000 loops, best of 3: 29.7 µs per loop
如果要使用非常接近尾端的值,請小心實現。指數函式很容易溢位。logistic._cdf比我快速實現的sigmoid_grad更健壯一些:in [60]: sigmoid_grad(-500)
/home/warren/anaconda/bin/ipython:3: runtimewarning: overflow encountered in double_scalars
import sys
out[60]: 0.0
in [61]: logistic._pdf(-500)
out[61]: 7.1245764067412855e-218
使用sech**2(1/cosh**2)的實現比上面的sigmoid_grad慢一點:in [101]: def sigmoid_grad_sech2(x):
.....: y = (0.5 / np.cosh(0.5*x))**2
.....: return y
in [102]: %timeit y = sigmoid_grad_sech2(x)
10000 loops, best of 3: 34 µs per loop
但它能更好地處理尾巴:in [103]: sigmoid_grad_sech2(-500)
out[103]: 7.1245764067412855e-218
in [104]: sigmoid_grad_sech2(500)
out[104]: 7.1245764067412855e-218
python純函式,偏函式
純函式 乙個函式的返回結果只依賴於他的引數,並且只執行過程裡面沒有 我們就把這個函式叫做純函式 即函式不讀取 修改外部變數,全域性變數。3個原則 變數都只在函式作用域內獲取,作為函式的引數傳入 不會產生 不會改變被傳入的資料或者其他資料 全域性變數 相同的輸入保證相同的輸出 是指函式被呼叫,完成可函...
純函式,快取函式
不純的函式具有 下面以之前的計稅函式以例進行說明 var percentvalue 5 var calculatetax value 複製 這個函式不是純函式,主要因為它以來外部環境計算其邏輯,當外部環境改變時,它會影響結果。因此,純函式的主要特徵就是不依賴於任何外部變數,也不應該改變任何外部變數。...
Python高階 純函式 內建函式 匿名函式
純函式 乙個函式的返回結果只依賴於它的引數,並且在執行過程裡面沒有 純函式的3個原則 1 變數都只在函式作用域內獲取,作為函式的引數傳入 2 不會產生 不會改變被傳入的資料或者其它資料 全域性變數 3 相同的輸入保證相同的輸出 內建函式 python有很多內建函式,常用的有 1 map函式 會根據提...