numpy와 함께 사용되는 숫자가 너무 적어서 몇 가지 문제가 있습니다. float64 정밀도가 손실되면 함수에 수레를 더할 때 사실과 수치 적 통합을 통해 내 문제를 추적하는 데 몇 주가 걸렸습니다. 합계가 아닌 제품으로 수학적으로 동일한 계산을 수행하면 값이 올바르게됩니다. 당신이 볼 수 있듯이숫자를 추가 할 때 파이썬/부동 소수점 단위의 부동 소수점 정밀도가
from matplotlib.pyplot import *
from numpy import vectorize, arange
import math
def func_product(x):
return math.exp(-x)/(1+math.exp(x))
def func_sum(x):
return math.exp(-x)-1/(1+math.exp(x))
#mathematically, both functions are the same
vecfunc_sum = vectorize(func_sum)
vecfunc_product = vectorize(func_product)
x = arange(0.,300.,1.)
y_sum = vecfunc_sum(x)
y_product = vecfunc_product(x)
plot(x,y_sum, 'k.-', label='sum')
plot(x,y_product,'r--',label='product')
yscale('symlog', linthreshy=1E-256)
legend(loc='lower right')
show()
가 0에 흩어져있다 매우 낮은 또는 합계 값이 동안 정확히 제로입니다 : 여기
은 코드 샘플과 결과의 플롯이다 곱해진 값은 괜찮습니다 ...누군가가 도와 줄 수 있습니까? 고마워요!
경우, 'NP이 .float128'. 같은 문제가 있습니까? – eumiro
그래, 같은 문제가 float96 ... –
정밀도 문제를 피하기 위해 로그 도메인에서이 합계를 사용하지 않는 이유는 무엇입니까? http://lingpipe-blog.com/2012/02/16/howprevent-overflow-underflow-logistic-regression/ – jeff7