我已经经历了馈送scipy.optimize(形状的(N,1))1-d矩阵给出不同(错误)结果与在载体的形式给它相同的数据(矢量w和y在下面的MVE
import numpy as np
from scipy.optimize import minimize
X = np.array([[ 1.13042959, 0.45915372, 0.8007231 , -1.15704469, 0.42920652],
[ 0.14131009, 0.9257914 , 0.72182141, 0.86906652, -0.32328187],
[-1.40969139, 1.32624329, 0.49157981, 0.2632826 , 1.29010016],
[-0.87733399, -1.55999729, -0.73784827, 0.15161383, 0.11189782],
[-0.94649544, 0.10406324, 0.65316464, -1.37014083, -0.28934968]])
wtrue = np.array([3.14,2.78,-1,0, 1.6180])
y = X.dot(wtrue)
def cost_function(w, X, y):
return np.mean(np.abs(y - X.dot(w)))
# %%
w0 = np.zeros(5)
output = minimize(cost_function, w0, args=(X, y), options={'disp':False, 'maxiter':128})
print('Vector Case:\n', output.x, '\n', output.fun)
# Reshaping w0 and y to (N,1) will 'break things'
w0 = np.zeros(5).reshape(-1,1)
y = y.reshape(-1,1) #This is the problem, only commenting this out will make below work
output = minimize(cost_function, w0, args=(X, y), options={'disp':False, 'maxiter':128})
print('1-d Matrix Case:\n', output.x, '\n', output.fun)
给
矢量案例:[3.13999999e+00 2.77999996e+00 -9.99999940e-01 1.79002338e-08,1.61800001e+00] 1.72112269325408288
一维矩阵案例:[-0.35218177 -0.50008129 0.34958755 -0.42210756 0.79680766] 3.3810648518841924 // 错得离真正的解决方案很远
有谁知道为什么使用一维矩阵输入的解决方案“错误”?
我怀疑这是一路上的 b/c.minimize将参数向量转换为实际向量然后我知道 (2,) + (2,1) 给出了 (2,2) 矩阵而不是 (2,)或 (2,1)。这仍然让我觉得“奇怪”,我想知道我是否在这里遗漏了一些更重要的点。
侃侃无极
月关宝盒
随时随地看视频慕课网APP
相关分类