scipy.stats.rv_continuous.拟合优化器参数



在使用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

最新更新