Scipy Minimize中能否用逆海森矩阵剔除fun值相近的多解?
用Scipy Minimize求解最小化问题的解选择问题
我在用Scipy的minimize求解如下最小化问题时,由于目标函数地形平坦,从两个不同初始猜测得到了残差和(fun值)几乎完全相同的解,但两个解的逆海森矩阵对角线元素(对应参数方差)差异显著,想知道能否据此剔除解2,认定解1为有效解。
问题代码
import numpy as np from scipy.optimize import minimize, lsmr data_set_1=[[24.714, 24.713, 24.605, 24.607], [25.708, 25.59, 25.557, 25.753], [22.713, 22.654, 22.655, 22.812], [24.231, 24.233, 24.289, 24.109], [24.401, 24.385, 24.396, 24.408], [26.124, 26.107, 25.915, 25.847], [15.341, 15.242, 15.049, 14.847], [22.332, 22.282, 22.324, 22.314], [25.843, 25.835, 25.683, 25.983], [24.4, 24.402, 24.522, 24.409], [20.218, 20.23, 20.212, 20.254], [21.927, 21.955, 21.94, 21.917], [20.697, 20.705, 20.731, 20.692], [21.13, 21.134, 21.196, 21.266], [24.619, 24.55, 24.556, 24.784], [25.294, 25.29, 25.322, 25.337], [24.237, 24.124, 24.06, 24.143], [18.533, 18.603, 18.814, 19.229], [26.235, 26.183, 26.226, 26.137], [25.754, 25.72, 25.658, 25.639], [26.786, 26.716, 26.646, 26.668], [23.863, 23.838, 23.946, 24.034], [21.402, 21.395, 21.401, 21.317], [22.382, 22.386, 22.363, 22.244], [22.435, 22.454, 22.434, 22.579], [20.416, 20.444, 20.439, 20.583], [24.929, 24.943, 24.819, 24.916], [25.839, 25.811, 25.716, 25.752]] data_set_2=[[0.786, 0.781, 0.766, 0.773], [0.78, 0.773, 0.782, 0.798], [0.983, 0.993, 0.991, 1.031], [0.74, 0.741, 0.756, 0.695], [0.614, 0.608, 0.642, 0.646], [0.659, 0.67, 0.666, 0.675], [0.488, 0.456, 0.438, 0.571], [0.99, 0.979, 0.97, 0.959], [0.806, 0.815, 0.801, 0.818], [0.772, 0.772, 0.756, 0.752], [0.364, 0.373, 0.357, 0.394], [0.735, 0.727, 0.729, 0.705], [0.489, 0.484, 0.495, 0.462], [0.803, 0.806, 0.817, 0.831], [1.018, 1.02, 1.021, 0.993], [0.589, 0.606, 0.599, 0.622], [0.61, 0.612, 0.591, 0.615], [0.973, 0.955, 0.94, 0.956], [0.628, 0.634, 0.643, 0.669], [0.64, 0.656, 0.637, 0.619], [0.732, 0.738, 0.742, 0.743], [0.872, 0.865, 0.859, 0.838], [0.199, 0.205, 0.21, 0.221], [0.783, 0.771, 0.775, 0.727], [1.069, 1.075, 1.064, 1.1], [0.707, 0.708, 0.705, 0.741], [1.07, 1.061, 1.058, 1.034], [0.911, 0.908, 0.91, 0.888]] def get_populations(initial,io): k,k1,x,y=initial[0],initial[1],initial[2],initial[3] kx,k1x=k*x,k1*x ky,k1y=k*y,k1*y kxy,k1xy=k*x*y,k1*x*y pF=(np.sqrt((k*k1)**2+(8*io*k*k1)+(8*io*k*k1**2))-(k*k1))/(4*(1+k1)) pC=(((4*io)+(4*io*k1))/(4*(1+k1)**2))-(pF/(1+k1)) pO=k1*pC pF2=(np.sqrt((kx*k1x)**2+(8*io*kx*k1x)+(8*io*kx*k1x**2))-(kx*k1x))/(4*(1+k1x)) pC2=(((4*io)+(4*io*k1x))/(4*(1+k1x)**2))-(pF2/(1+k1x)) pO2=k1x*pC2 pF3=(np.sqrt((ky*k1y)**2+(8*io*ky*k1y)+(8*io*ky*k1y**2))-(ky*k1y))/(4*(1+k1y)) pC3=(((4*io)+(4*io*k1y))/(4*(1+k1y)**2))-(pF3/(1+k1y)) pO3=k1y*pC3 pF4=(np.sqrt((kxy*k1xy)**2+(8*io*kxy*k1xy)+(8*io*kxy*k1xy**2))-(kxy*k1xy))/(4*(1+k1xy)) pC4=(((4*io)+(4*io*k1xy))/(4*(1+k1xy)**2))-(pF4/(1+k1xy)) pO4=k1xy*pC4 local_chi2=0 for data1,data2 in zip(data_set_1,data_set_2): populations=np.array([[pF,pO,pC],[pF2,pO2,pC2],[pF3,pO3,pC3],[pF4,pO4,pC4]]) least_squared_fit_1=lsmr(populations/io,np.array([data1])/4*800,maxiter=10) least_squared_fit_2=lsmr(populations/io,np.array([data2])*800,maxiter=10) local_chi2+=least_squared_fit_1[3]**2+least_squared_fit_2[3]**2 return local_chi2 # 求解示例(解2的初始猜测) global_parameter_solution=minimize(get_populations,args=io, x0=np.array([2e3,2e-3,9,2e1]),bounds=np.array([[0,np.inf],[0,np.inf],[0,np.inf],[0,np.inf]]),options={'maxiter':100000})
得到的两个解信息
- 解1(初始猜测:
np.array([5e2, 2e-2, 7, 3e1])):逆海森矩阵对角线为[0.99964765, 0.00841953, 1.41597902, 3.25752296] - 解2(初始猜测:
np.array([2e3, 2e-3, 9, 2e1])):逆海森矩阵对角线为[1.00008883e+00, 2.07424141e-03, 5.98621521e+01, 6.83255242e+01]
解的选择分析
不能直接仅凭逆海森矩阵的方差大小就剔除解2,需要从以下几个维度判断:
- 参数可识别性本质:目标函数平坦说明部分参数存在共线性或不可识别问题——数据无法区分不同参数组合的拟合效果,两个解都处于残差的“平坦最优区”,本质上都是数据允许的合理解。
- 逆海森矩阵的可靠性:Scipy
minimize返回的近似逆海森矩阵(如BFGS/L-BFGS-B的估计)在目标函数平坦区域的误差极大,不能直接当作参数方差的准确度量。当目标函数二阶导数接近0时,海森矩阵近似会不稳定,方差结果不可靠。 - 先验知识约束:如果参数有物理/业务上的合理范围(比如x、y的取值是否符合实际场景),可以用先验信息筛选。比如若解2的x、y值远超出合理区间,可优先选解1;但若无这类约束,不能随意剔除任一解。
- 拟合效果验证:虽然残差和相同,可检查两个解对应的逐点拟合残差分布、模型预测值是否符合数据趋势,或用交叉验证(若有额外数据)测试泛化能力,泛化效果更好的解更优。
总结:仅靠方差差异不足以剔除解2,需结合参数实际意义、模型可识别性分析及额外验证手段选择更合理的解。若无额外约束,两个解都是拟合数据的有效候选,不能直接认定解1为唯一有效解。
内容的提问来源于stack exchange,提问作者samman
相关产品推荐
相关产品推荐

