2013-11-25 4 views
3

내가 데이터 세트에 대한 푸 아송 분포에 맞게 필요에 맞게 :푸 아송 분포는

fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1) # Target function 
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function 
p0 = [1., 2.] # Initial guess for the parameters 
p1, success = optimize.leastsq(errfunc, p0[:], args=(bins_mean, n)) 

는 I 만든 것을 SciPy documentation에 제공된 예를 사용.

감마 함수 부분에 주석을 달면 매력처럼 작동하므로 문제는 있지만 해결 방법에 대한 단서가 없습니다.

TypeError: can only concatenate list (not "int") to list 

적합의 입력 인수는, plt.hist의 출력 내가 확인하고 유형은 당신이 말 때문에 NumPy와 ndarray

+0

어떤 오류가 발생합니까? –

+2

히스토그램이 아닌 데이터가있는 경우 여기에서 최적화 할 필요가 없습니다. 포아송 분포의 경우,'np.mean (data)'를 취하는 것만으로 최적의 매개 변수 (lambda,'p [1]')를 분석적으로 찾을 수 있습니다. 'p [0]'는 단지 정규화입니다. – askewchan

+1

'bins_mean'과'n' numpy 배열입니까? 오류로 인해 나는 당신이 명단을 통과하고 있다고 믿게됩니다. –

답변

4
fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1) # Target function 
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function 
p0 = [1., 2.] # Initial guess for the parameters 
p1, success = optimize.leastsq(errfunc, p0[:], args=(bins_mean, n)) 

입니다 :

는 나는 다음과 같은 오류가 발생합니다 그것은 (X + 1) 부분, 난 당신이

fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1) 

를 변경하는 경우가 작동 할 것이라고 추측하고있는 math.gamma없이 작동

from scipy.misc import factorial 
fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/factorial(x) 

이후 목록 (또는 내가 생각 float를 아닌가요 아무것도) 요인이 목록에서 제대로 작동 할 수 있지만, 같은 math.gamma 나던?

사이드 질문 : 그냥 ** 대신에 pow를 사용하는 이유는 무엇입니까?