使用python最大化多参数求和

时间:2017-02-27 16:40:52

标签: python optimization scipy minimize

我正在尝试使用双组分混合威布尔分布拟合风数据集v=v1,.....,vm

我发现了一篇建议使用最大似然法的论文,特别是最大化以下等式:

equation to maximize

Omegaa1a2b1b2是我想要更改的参数,以便最大化功能{{1} }是一系列已知的风速。

我一直在尝试使用SciPy最小化算法,但没有成功。

这是我到目前为止所做的:

v=v1,.....,vm

但是我继续收到以下错误:

  

minimizer_function()缺少5个必需的位置参数:' omega',' a1',' b1',' a2'和& #39; B2'

我很确定我错过了什么。

1 个答案:

答案 0 :(得分:1)

scipy minimizers期望变量存储在单个一维数组中。在您的情况下,目标函数应该类似于minimizer_function(x, v),其中x是包含omega,a1,b1,a2和b2的五个元素的数组。就是这样的事情

def minimizer_function(x, v):
   omega, a1, b1, a2, b2 = x
   return np.reciprocal(np.sum((omega*(a1/b1)*((v/b1)**(a1-1))*(np.exp(-((v/b1)**a1)))+(1-omega)*(a2/b2)*((v/b2)**(a2-1))*(np.exp(-((v/b2)**a2))))))

minimize的调用类似于

x0 = np.array([0.5,1.0,1.0,1.0,1.0])
res = optimization.minimize(minimizer_function, x0, args=(v,), method='nelder-mead',options={'xtol': 1e-8, 'disp': True})