ValueError:使用optimize.minimize时需要多于3个值才能解压缩

时间:2016-10-10 22:19:18

标签: python

我对python很新,我对此感到困惑: 我想使用scipy.optimize.minimize来最大化函数,并且我对我定义的函数的额外参数有一些问题。

我寻找了大量已回答问题的解决方案,但我无法找到解决问题的方法。 我在Structure of inputs to scipy minimize function中看到如何传递额外的参数,这些参数在函数最小化时想要保持不变,从这个角度来看,我的代码对我来说似乎很好。

这是我的代码:

import numpy as np
from scipy.stats import pearsonr
import scipy.optimize as optimize

def min_pears_function(a,exp):
    (b,c,d,e)=a
    return (1-(pearsonr(b + exp[0] * c + exp[1] * d + exp[2],e)[0]))


a = (log_x,log_y,log_t,log_z) # where log_x, log_y, log_t and log_z are numpy arrays with same length

guess_PF=[0.6,2.0,0.2]

res = optimize.minimize(min_pears_function, guess_PF, args=(a,), options={'xtol': 1e-8, 'disp': True})

运行代码时出现以下错误:

  

ValueError:解包需要3个以上的值

但是,我无法看到我所缺少的论点。该函数似乎工作正常,所以我猜问题是在optimize.minimize调用?

1 个答案:

答案 0 :(得分:0)

您的错误发生在此处:

def min_pears_function(a,exp):
    # XXX: This is your error line
    (b,c,d,e)=a
    return (1-(pearsonr(b + exp[0] * c + exp[1] * d + exp[2],e)[0]))

这是因为:

  • 您传递给optimize.minimize的初始值为guessPF,其中只有三个值([0.6,2.0,0.2])。
  • 此初始值作为变量min_pears_function传递给a

你的意思是以exp传递吗?你想要解决的是exp吗?在这种情况下,请将签名重新定义为:

def min_pears_function(exp, a):
    ...