【发布时间】:2014-12-19 10:48:39
【问题描述】:
我正在尝试使用scipy.optimize.minimize 最小化 Python 中的一个函数,以确定四个不同的参数。
我想在优化算法的每一步打印当前评估的参数,以便我可以使用它们来使我的初始猜测更好。
我该怎么做?
【问题讨论】:
标签: python scipy params minimization
我正在尝试使用scipy.optimize.minimize 最小化 Python 中的一个函数,以确定四个不同的参数。
我想在优化算法的每一步打印当前评估的参数,以便我可以使用它们来使我的初始猜测更好。
我该怎么做?
【问题讨论】:
标签: python scipy params minimization
使用 callback 关键字参数。
scipy.optimize.minimize 可以接受关键字参数callback。这应该是一个接受当前参数向量作为输入的函数。每次迭代后都会调用此函数。
例如,
from scipy.optimize import minimize
def objective_function(xs):
""" Function to optimize. """
x, y = xs
return (x-1)**2 + (y-2)**4
def print_callback(xs):
"""
Callback called after every iteration.
xs is the estimated location of the optimum.
"""
print xs
minimize(objective_function, x0 = (0., 0.), callback=print_callback)
通常,人们希望在对回调的不同调用之间保留信息,例如迭代次数。一种方法是使用闭包:
def generate_print_callback():
"""
Generate a callback that prints
iteration number | parameter values | objective function
every tenth iteration.
"""
saved_params = { "iteration_number" : 0 }
def print_callback(xs):
if saved_params["iteration_number"] % 10 == 0:
print "{:3} | {} | {}".format(
saved_params["iteration_number"], xs, objective_function(xs))
saved_params["iteration_number"] += 1
return print_callback
调用最小化函数:
minimize(objective_function, x0 = (0., 0.), callback=generate_print_callback())
【讨论】: