gpt4 book ai didi

Python正确使用scipy.optimize.minimize

转载 作者:行者123 更新时间:2023-12-01 04:52:57 28 4
gpt4 key购买 nike

我正在尝试执行以下函数的最小化:

def mvqr(P, y, x, c):
s = 0
for i in xrange(1, len(y)):
summation = numpy.linalg.norm(numpy.dot(numpy.linalg.inv(P), (y[i,:] - numpy.dot(beta, x[i,:])))) + numpy.dot(numpy.dot(c.T, linalg.inv(P)), (y[i,:] - numpy.dot(beta, x[i,:])))
s = s + summation
return s

这是主文件的行:

fun = lambda beta: mvqr(E, Y_x, X_x, v)
result = minimize(fun, beta0, method = 'BFGS')

beta 是函数 mvqr() 的未知变量,beta0 是初始猜测,一个 (2,2) 数组 I之前已经计算过。

我收到一个错误:

NameError:未定义全局名称“beta”

对于谁想知道函数 mvqr() 的文件是否已经位于 python 包的目录中,答案是:是的,它已经位于。

我认为问题出在 mvqr() 函数中的 beta 以及 lambda 函数的使用。

有什么帮助吗?

编辑

感谢 pv。代码现在编译时没有错误,但执行最小化时不会迭代,因为函数 minimize 的输出显示消息“优化已成功终止。” 但根本不迭代并且返回初始猜测。

  status: 0
success: True
njev: 1
nfev: 6
hess_inv: array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
fun: 1.2471261924040662e+31
x: array([ 3.44860608e+13, -4.10768809e-02, -1.42222910e+15,
-1.22803296e+00])
message: 'Optimization terminated successfully.'
jac: array([ 0., 0., 0., 0.])

我也尝试过scipy.optimize.fmin_bfgs,但结果几乎相同:

Optimization terminated successfully.
Current function value: 937385449919245008057547138533569682802290504082509386481664.000000
Iterations: 0
Function evaluations: 6
Gradient evaluations: 1

不幸的是,beta0 可能是局部最小值,或者是一个驻点,因为 jac == [0, 0, 0, 0] ,因此该算法终止,但对我来说奇怪的是,最初的猜测是函数的最小值(即使是本地函数)。有谁知道如何避免它?

如有任何帮助,我们将不胜感激。

最佳答案

将定义更改为 def mvqr(beta, P, y, x, c): 并执行 fun = lambda beta: mvqr(beta.reshape(2,2), E, Y_x, X_x, v)minimize(fun, beta0.ravel()) 如果您希望优化 2x2 矩阵 beta 的值。

之后,考虑阅读 Python 教程,尤其是。关于全局变量和局部变量。

关于Python正确使用scipy.optimize.minimize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049595/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com