首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >minimize_scalar的应用

minimize_scalar的应用
EN

Stack Overflow用户
提问于 2021-06-25 03:53:36
回答 1查看 29关注 0票数 0

我正在尝试使用不同的结构来复制这里发布的结果(How to use scipy.optimize minimize_scalar when objective function has multiple arguments?)。目标是完全相同的,但我只是想用一种不同的方式进行编码。下面是我的代码:

代码语言:javascript
复制
def mini(g,a,b,args):
  object=lambda w1: g(w1, *args)
  result=minimize_scalar(object, bounds=(a, b))
  minzer, minval=result.x, result.fun
  return minzer,minval

def errorr(w0,w1,x,y):
  y_pred = w0 + w1*x
  mse = ((y-y_pred)**2).mean()
  return mse

x = np.array([1,2,3])
y = np.array([52,54,56])
w0=50

mini(errorr, -5, 5, (w0,x,y))

然而,使用我的代码获得的结果与原始帖子中的结果有很大不同。我想知道我在代码中哪里犯了错误,导致了不同的结果。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 04:51:24

由于您使用的是lambda w1: g(w1, *args),所以相对于第一个函数参数w0是最小化的。要最小化w1,您可以改为编写lambda w1: g(args[0], w1, *args[1:])

但是,请避免使用python关键字作为变量名(例如object)。此外,lambda函数是匿名函数,因此将其赋给变量与其用途相矛盾。因此,我建议要么

代码语言:javascript
复制
def mini(g,a,b,args):
    def obj_fun(w1): return g(args[0], w1, *args[1:]) 
    result = minimize_scalar(obj_fun, bounds=(a, b))
    return result.x, result.fun

代码语言:javascript
复制
def mini(g,a,b,args):
    result = minimize_scalar(lambda w1: g(args[0], w1, *args[1:]), bounds=(a, b))
    return result.x, result.fun
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68122027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档