You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多元线性方程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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:12:17