我试图提取威布尔分布参数(形状‘k’和比例‘lambda’)来满足一定的均值和方差。在这个例子中,平均值是4,方差是8。这是一个2-未知数和2-方程类型的问题。
由于该算法与Excel 2010的GRG求解器一起工作,我确信它与我构建问题的方式有关,或者可能与我使用的库有关我不太熟悉优化库,所以请告诉我错误在哪里。
以下是脚本:

from scipy.optimize import fmin_cg
import math

def weibull_mu(k, lmda):                  #Formula can be found on wikipedia
    return lmda*math.gamma(1+1/k)
def weibull_var(k, lmda):                 #Formula can be found on wikipedia
    return lmda**2*math.gamma(1+2/k)-weibull_mu(k, lmda)**2

def min_function(arggs):
    actual_mean = 4                          # specific to this example
    actual_var = 8                           # specific to this example
    k = arggs[0]
    lmda = arggs[1]
    output = [weibull_mu(k, lmda)-(var_wei)]
    output.append(weibull_var(k, lmda)-(actual_var)**2-(actual_mean)**2)
    return output

print fmin(min_function, [1,1])

此脚本提供以下错误:
[...]
  File "C:\Program Files\Python27\lib\site-packages\scipy\optimize\optimize.py", line 278, in fmin
    fsim[0] = func(x0)
ValueError: setting an array element with a sequence.

最佳答案

据我所知,min_function返回多维列表,但如果我没有弄错的话,fminfmin_cg确实希望目标函数返回标量。
如果你在寻找两个方程问题的根源,我想最好用root函数代替。据我所知,scipy没有为向量函数提供任何通用的优化器。

关于python - 使用SCIPY.OPTIMIZE.FMIN_CG提取Weibull分布参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11245869/

10-09 07:06