我正在使用scipy.optimize.fmin解决一个简单的优化问题,并试图了解如何正确使用它
我创建了一个优化函数,该函数返回一个值(一个要优化的值)并使用要查找的2个参数(alpha和beta)。
def q_learning_model(params, *args):
choices = list(args[0].choice.astype(int))
rewards = list(args[0].reward.astype(int))
num_of_trials = len(choices)
prob_of_choice = [0]*num_of_trials
accuracy = [0]*num_of_trials
beta = params[0]
alpha = params[1]
for trial in range(num_of_trials):
# do things
return -(np.sum(np.log(prob_of_choice)))
x1=()
minimum = optimize.fmin(q_learning_model,x0=(1,0.1),args=(data[['choice','reward']], x1))
我知道我需要传递函数本身(作为可调用函数),初始猜测以及函数(正在优化的)所需的其他参数-就我而言的数据。
我希望它与args=data[['choice','reward']]
一起运行,但是它仅在之后添加另一个变量时运行(这意味着如果只有一个arg,我会报错)-当我传递一个空元组时,它也会运行在数据之后。
从我看到的情况来看,fmin
将x0
用作q_learning_model的params参数,因此*args
假设采用任意数量的值(在我的情况下为1-数据)。
我想念什么吗?我应该如何正确调用fmin?