minimize_scalar 的应用
application of minimize_scalar
我正在尝试使用不同的结构复制此处发布的结果 ()。目标完全相同,但我只是想以不同的方式对其进行编码。这是我的代码:
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))
但是,使用我的代码获得的结果与原始帖子中的结果有很大不同。我想知道我的代码在哪里犯了导致不同结果的错误。谢谢!
由于您使用 lambda w1: g(w1, *args)
,您正在最小化第一个函数参数 w0
。要最小化 w1
,您可以改写 lambda w1: g(args[0], w1, *args[1:])
。
但是,请避免使用 python 关键字作为变量名(例如 object
)。此外,lambda 函数是匿名函数,因此将其分配给变量与其目的相矛盾。因此,我建议
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
或
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
我正在尝试使用不同的结构复制此处发布的结果 (
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))
但是,使用我的代码获得的结果与原始帖子中的结果有很大不同。我想知道我的代码在哪里犯了导致不同结果的错误。谢谢!
由于您使用 lambda w1: g(w1, *args)
,您正在最小化第一个函数参数 w0
。要最小化 w1
,您可以改写 lambda w1: g(args[0], w1, *args[1:])
。
但是,请避免使用 python 关键字作为变量名(例如 object
)。此外,lambda 函数是匿名函数,因此将其分配给变量与其目的相矛盾。因此,我建议
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
或
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