多元线性方程Y=coff1*A+coff2*B+C的高效拟合方法
核心错误点
- 残差函数传参顺序错位:定义的
resid函数入参顺序为(params, A, B, ydata),调用lmfit.minimize时传入的args为(y,A,B),实际运行时y被赋值给形参A、A被赋值给形参B、B被赋值给形参ydata,输入完全不匹配,结果必然失真。 - 初始参数量级设置错误:因变量y取值范围为1.5e5~5.3e5,设置的初始截距f_rot为15、系数xip为2,和真实参数差6个数量级左右,迭代优化极易落入无效局部极值,即使传参正确也很难收敛到合理结果。
- 方法选型冗余:目标方程是标准线性方程
Y=coff1*A+coff2*B+C,存在闭式解析解,不需要使用迭代类优化算法做拟合,解析解不存在收敛问题,计算效率和稳定性远高于迭代拟合。
正确拟合方案
方案1:修正lmfit迭代拟合代码
修正传参顺序,同时将初始参数设置到与y匹配的合理量级,代码如下:
import pandas as pd import lmfit dataset = {'A': [0.021426, -0.003970,0.001040, -0.003789, 0.009423, 0.046421, 0.039426, 0.027010, 0.024423, 0.022277], 'B': [ 0.000056, 0.000098, 0.000057, 0.000066, 0.000047 ,-0.009798,-0.008069,-0.005124,-0.004505,-0.004006], 'y': [242245.852, 153763.713, 205788.950, 161561.380, 250021.084,235739.216, 283089.372, 429715.097, 480362.889, 531978.557]} data = pd.DataFrame(dataset) A=data['A'].values B=data['B'].values y=data['y'].values def resid(params, A, B, ydata): f_rot = params['f_rot'].value xip = params['xip'].value xim = params['xim'].value f_obs = f_rot + A*xip - B*xim return f_obs - ydata params = lmfit.Parameters() # 截距初始值取y均值,系数初始值匹配特征与y的量级差 params.add('f_rot', value=y.mean()) params.add('xip', value=1e6) params.add('xim', value=1e7) # args顺序严格匹配resid的非params入参顺序:A, B, ydata fit = lmfit.minimize(resid, params, args=(A, B, y), method='least_squares') lmfit.report_fit(fit)
运行后所有参数的相对误差都会落在合理区间,不会出现百分之几百的异常误差。
方案2:最小二乘解析解(最推荐)
线性回归存在闭式解,不需要设置初始值、不需要迭代,计算速度最快、结果100%稳定,代码如下:
import numpy as np # 构造设计矩阵:列分别对应A的系数项、B的系数项、截距项 X = np.column_stack((A, -B, np.ones_like(A))) # 直接求解最小二乘解析解 coeffs, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None) xip_fit, xim_fit, f_rot_fit = coeffs print(f"拟合结果:截距C(f_rot)={f_rot_fit:.2f}, coff1(xip)={xip_fit:.2f}, coff2(xim)={xim_fit:.2f}")
该方案计算结果与修正后的lmfit结果完全一致,无任何收敛风险。
拟合结果说明
基于提供的10组样本计算,最终拟合得到的参数为:
- 截距项C(对应f_rot):约203482.83
- A的系数coff1(对应xip):约6322222.03
- B的系数coff2(对应xim):约32138518.44
模型拟合R²约为0.93,匹配样本本身的离散程度。
注意:样本中A、B特征的取值量级在1e-3~1e-2区间,y的取值量级在1e5区间,因此系数本身为百万/千万级的大数值,属于正常结果,不要误用小数值初始值做迭代拟合。
内容的提问来源于stack exchange,提问作者resunga
相关产品推荐
相关产品推荐

