使用scipy.stats.gamma和scipy.optimize.minimize估算比例参数

时间:2013-12-22 17:05:35

标签: python numpy scipy

我正在尝试使用scipy.stats.gammascipy.optimize.minimize以及我的数据来估算比例参数。 我建立了一个待评估的函数:

def loss_func(para, x, y):
    return sum((gamma.cdf(x, para[0], para[1])-y)**2)/2

res=minimize(loss_func, ini0, (x ,y), method='nelder-mead')

这样,res.x[1]会返回比例参数,res.x[0]会返回形状参数吗?

1 个答案:

答案 0 :(得分:1)

不,我认为你做得不对。有关您的函数,请参阅scipy.stats累积分布函数方法的文档:.cdf(x, a, loc=0, scale=1)

def loss_func(para, x, y):
    return sum((gamma.cdf(x, para[0], para[1])-y)**2)/2

para[0]变为a因此形状参数和para[1]变为loc,这是位置参数。结果,res.x[1]返回位置,res.x[0]返回形状,这不是您想要的。

所以你应该将你的功能改为:

def loss_func(para, x, y):
    return sum((gamma.cdf(x, para[0], scale=para[1])-y)**2)/2

现在,请记住,您实际上是在进行最小二乘最小化,以便将经验CDF与Gamma CDF相匹配。 @ behzad.nouri建议使用.fit()方法的是最大似然法。这两者是不同的,预计结果会有所不同。如果您有原始数据(而不是经验CDF),那么最好使用.fit().fit_loc_scale()方法。