【发布时间】:2015-02-20 19:11:05
【问题描述】:
我试图最小化一个很长的函数(它是 500000 个子函数部分的总和),以便将一些参数拟合到概率模型中。我使用scipy.optimize.minimize 函数。我尝试了Powell 和Nelder-Mead 算法,鲍威尔在我的设置中看起来确实更快。但是,我真的不明白如何强制该过程在给定时间后给我一些结果,即使它们不是“最佳”的。
我填写了选项maxiter、maxfev、xtol 和ftol,但我并不真正理解这些选项,因为我试图在我的函数中添加print,我注意到算法评估它超过maxfev 次,但是当它达到最大值点时,它会发送一个错误“达到最大迭代次数”。
谁能解释一下我使用的两种算法是如何工作的?文档很不清楚。
我的代码:
def log_likelihood(r, alpha, a, b, customers):
if r <= 0 or alpha <= 0 or a <= 0 or b <= 0:
return -np.inf
c = sum([log_likelihood_individual(r, alpha, a, b, x, tx, t) for x, tx, t in customers])
print -c
return c
negative_ll = lambda params: -log_likelihood(*params,customers=customers)
params0 = (1, 1, 1, 1)
res = minimize(negative_ll, params0, method='Powell', callback=print_callback, options={'disp': True, 'ftol':0.05, 'maxiter':3, 'maxfev":15})
谢谢。
【问题讨论】:
标签: python optimization options minimize