Python 两参数最大化函数
我试着找到两个参数的值,它们叫a e b,最大化函数fx,a,b,b>0。 我写道:Python 两参数最大化函数,python,python-2.7,scipy,minimize,Python,Python 2.7,Scipy,Minimize,我试着找到两个参数的值,它们叫a e b,最大化函数fx,a,b,b>0。 我写道: a=0.1 #start value for a b=150 #start value for b n=len(x) def f(y,a,b): c=sum([np.log(1-a/b*i) for i in y]) return -n*np.log(b)+(1-a/a)*c minimize(f,x,args=(a,b)) 其中x是包含我的数据的数组 我得到以下错误: RuntimeWarn
a=0.1 #start value for a
b=150 #start value for b
n=len(x)
def f(y,a,b):
c=sum([np.log(1-a/b*i) for i in y])
return -n*np.log(b)+(1-a/a)*c
minimize(f,x,args=(a,b))
其中x是包含我的数据的数组
我得到以下错误:
RuntimeWarning: invalid value encountered in log
c=sum([np.log(1-a/b*i) for i in x])
C:\Python27\lib\site-packages\numpy\core\_methods.py:26: RuntimeWarning: invalid value encountered in reduce
return umr_maximum(a, axis, None, out, keepdims)
fun: nan
hess_inv: array([[1, 0, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 0, 0, 0],
[0, 0, 1, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 1, 0, 0],
[0, 0, 0, ..., 0, 1, 0],
[0, 0, 0, ..., 0, 0, 1]])
jac: array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 97
nit: 0
njev: 1
status: 2
success: False
有人能帮我吗?尝试使用的bounds属性设置boundarys。可能您的b在某一点上为负值。对于这个问题,由于您正在搜索a的最佳值,b您的目标应该重新定义如下:
def f(x,y):
a = x[0] # Parameter 1
b = x[1] # Parameter 2
c=sum([np.log(1-a/b*i) for i in y])
return -n*np.log(b)+(1-a/a)*c
minimize(f,x,args=(y))
接下来,您必须实现一个检查,以确保np.log得到一个大于0.0的值,否则您将得到一个域错误。您可以计算w.r.tb的值的边界,或者反过来计算,然后指定边界。您能给我们看一下y数组吗?