【问题标题】:Maximize Multi-parameter summation with python使用python最大化多参数求和
【发布时间】:2017-02-28 01:26:38
【问题描述】:

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

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

Omegaa1a2b1b2 是我要更改的参数以最大化功能,v=v1,.....,vm 是一系列已知风速。

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

这是我目前所拥有的:

def minimizer_function(v,omega,a1,b1,a2,b2):
   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))))))

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

但是我不断收到以下错误:

minimizer_function() 缺少 5 个必需的位置参数:'omega'、'a1'、'b1'、'a2' 和 'b2'

我很确定我错过了什么。

【问题讨论】:

    标签: python optimization scipy minimize


    【解决方案1】:

    scipy 最小化器期望变量存储在单个一维数组中。在您的情况下,目标函数应该类似于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})
    

    【讨论】:

    • 嗨,沃伦,非常感谢您对此进行调查。它现在运行,值看起来很奇怪,但我可能仍然缺少一些东西
    • 关于如何最大化功能的任何建议?目前我正在最小化函数 abs 的倒数
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 2019-06-12
    • 2020-11-10
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多