【发布时间】:2021-02-28 11:49:04
【问题描述】:
我想使用 fmin 来确定下面提到的 Weibull 函数的参数 a、b 和 c 用于采样数据 x。
x= np.array([1.79, 2.04, 2.42, 2.19, 1.75, 1.59, 1.63, 1.69, 1.6 , 1.68, 1.86,
1.99, 1.88, 1.37, 1.96, 2.71, 2.5 , 1.71, 1.53, 2.65])
def fitweibull(x):
def optfun(theta):
return np.exp(-((x-theta[0])/theta[1])**theta[2])
# initial guesses:
a = 1
b = 1
c = 1
return fmin(optfun, [a,b,c],xtol=0.01,ftol=0.01,disp=0)
fitweibull(x)
它给了我错误:ValueError: setting an array element with a sequence.
第一个问题:我做错了什么?第二个问题:有没有办法通过为a、b、c定义一个更好的起点来提高解的准确性?
我对用于确定 weibull 拟合的内置 scipy 函数不感兴趣,除非它用于验证结果。
【问题讨论】:
-
不幸的是,我会说像这样安装它的整个想法是错误的。详细的错误消息是由于
fmin需要一个返回单个值的函数。 -
是的,这将是 a、b 和 c 的单个值(是 theta[0]、theta[1]、theta[2]。例如:gist.github.com/plasmaman/5508278
-
...你见过
-np.log( np.sum( ... ) )的对数可能性吗? -
重点是我想适应自定义函数。不是内置的 scipy。
-
我的 cmets 的全部意义在于,这与您的错误无关。您放置的链接可最大限度地减少对数似然性。因此,它获取函数的日志并对其求和。这是通过最小化负数来最大化的。因为
x是np.array你的optfun返回一个数组。要使fmin工作,您需要返回一个标量。
标签: scipy data-fitting weibull