泊松分布拟合

时间:2013-11-25 16:47:13

标签: python numpy scipy distribution curve-fitting

我需要将泊松分布拟合到一组数据中:

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))

我使用SciPy documentation中提供的示例。

如果我评论伽玛函数部分,它就像一个魅力,所以问题在那里,但我不知道如何解决它。

我收到以下错误:

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

fit的输入参数是plt.hist的输出,我检查过,类型是numpy ndarray

1 个答案:

答案 0 :(得分: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))

既然你说它没有math.gamma(x + 1)部分,我猜它会改变

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

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

因为math.gamma不喜欢列表(或者我猜的任何浮点数),而factorial可以正常使用列表吗?

附带问题:为什么要使用pow,而不仅仅使用**?