1 回答
TA贡献1772条经验 获得超5个赞
In [300]: y
Out[300]: array([ 4.7197293 , 1.7725223 , 0.85632763, -6.17272225, -3.8040323 ])
In [301]: w0
Out[301]: array([0., 0., 0., 0., 0.])
In [302]: cost_function(w0,X,y)
Out[302]: 3.465066756332
最初改变的形状y不会改变成本:
In [306]: cost_function(w0,X,y.reshape(-1,1))
Out[306]: 3.4650667563320003
现在得到一个解决方案:在 [308]: output = optimize.minimize(cost_function, w0, args=(X, y), options={'disp':False ...: , 'maxiter':128})
In [310]: output.x
Out[310]:
array([ 3.14000001e+00, 2.77999999e+00, -9.99999962e-01, -5.58139763e-08,
1.61799993e+00])
将成本评估为最优 x
In [311]: cost_function(output.x,X,y)
Out[311]: 7.068144833866085e-08 # = output.fun
但是对于 reshape y,成本是不同的:
In [312]: cost_function(output.x,X,y.reshape(-1,1))
Out[312]: 4.377833258899681
初始值x0已被代码展平(查看optimize.optimize._minimize_bfgs),因此更改 的形状w0无关紧要。但是args数组被传递给成本函数而没有改变。所以如果改变形状y改变成本计算,它会改变优化。
添加回答
举报