我试图提取威布尔分布参数(形状‘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
返回多维列表,但如果我没有弄错的话,fmin和fmin_cg确实希望目标函数返回标量。
如果你在寻找两个方程问题的根源,我想最好用root函数代替。据我所知,scipy没有为向量函数提供任何通用的优化器。
关于python - 使用SCIPY.OPTIMIZE.FMIN_CG提取Weibull分布参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11245869/