python - 使用两个参数最大化函数
问题描述
我试图找到两个称为a e b的参数的值,它们使函数 f(x,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 是包含我的数据的数组。
我收到以下错误:
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
有人可以帮助我吗?
解决方案
对于这个问题,由于您正在寻找 的最佳值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
获得value > 0.0
否则您将获得域错误。您可以计算a
wrt的值的界限b
或以其他方式计算,然后指定bounds
.
推荐阅读
- kubernetes - 在 kubernetes 中使用 readOnlyRootFilesystem 时如何豁免目录?
- sql - sqlnavigator 使用哪种技术来执行命令?
- c++ - 使用各种数据类型的成员创建对象的简单方法
- python - Django 休息框架 IntegrityError
- java - 如何在没有 ide 的情况下运行 Slenium+Java+Cucumber
- tensorflow2.0 - 如何在 tensorflow 2.0 中查看训练有素的 RealNVP 的转变和规模?
- pandas - 根据另一列的唯一值合并单元格中的列值
- reactjs - 手动移除事件监听器反应钩子
- python - 彩色对数图:去除 10 个标签的幂
- excel - 如果打开任何其他应用程序,Excel VBA 运行速度会很慢