在使用scipy.stats.rv_continuous.fit
时,是否可以操纵optimizer
的参数,即相对公差?
在R中我们可以用control
。Python怎么样?
fitdist(data, "weibull", method="mle", control=list(reltol=1e-14))$estimate
fit
方法的optimizer
参数允许您覆盖默认的优化函数(即scipy.optimize.fmin
)并提供您自己的优化函数。作为optimizer
参数的可调用对象必须具有optimize(func, x0, args=(), disp=False)
签名。
要更改默认的控制参数,您可以使用自定义的optimizer
,它调用fmin
并附加xtol
和/或ftol
参数。(注意:您可以使用不同的优化器而不是fmin
。)我经常使用的一个是
from scipy.optimize import fmin
def optimizer(func, x0, args=(), disp=False):
return fmin(func, x0, args=args, disp=disp, xtol=1e-13, ftol=1e-12)
例如,from scipy.stats import weibull_min
from scipy.optimize import fmin
def optimizer(func, x0, args=(), disp=False):
return fmin(func, x0, args=args, disp=disp, xtol=1e-13, ftol=1e-12)
data = [2457.145, 878.081, 855.118, 1157.135, 1099.82]
shape, loc, scale = weibull_min.fit(data, floc=0, optimizer=optimizer)
print(f"shape = {shape:9.7f}, scale={scale:9.7f}")
输出:shape = 2.3078998, scale=1463.7713354