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

lmfit库类/属性/函数导航及result、stderr相关技术疑问

关于lmfit库拟合结果的结构疑问

我一直有个通用问题:不知道怎么通过导航库模块获取想要的结果。以用lmfit库做函数拟合为例,我写了如下代码:

from lmfit import Model, Parameters
import numpy as np  # 补充导入numpy,否则exp函数无法使用

# 导入数据
x=[-1.5933, -1.58, -1.5667, -1.5533, -1.54, -1.5267, -1.5133, -1.5, -1.4867, -1.4733, -1.46, -1.4467, -1.4333, -1.42, -1.4067, -1.3933, -1.38, -1.3667, -1.3533, -1.34, -1.3267, -1.3133, -1.3, -1.2867, -1.2733, -1.26, -1.2467, -1.2333, -1.22, -1.2067, -1.1933, -1.18, -1.1667, -1.1533, -1.14, -1.1267, -1.1133, -1.1, -1.0867, -1.0733, -1.06, -1.0467, -1.0333, -1.02, -1.0067, -0.9933, -0.98, -0.9667, -0.9533, -0.94, -0.9267, -0.9133, -0.9, -0.8867, -0.8733, -0.86, -0.8467, -0.8333, -0.82, -0.8067, -0.7933, -0.78, -0.7667, -0.7533, -0.74, -0.7267, -0.7133, -0.7, -0.6867, -0.6733, -0.66, -0.6467, -0.6333, -0.62, -0.6067, -0.5933, -0.58, -0.5667, -0.5533, -0.54, -0.5267, -0.5133, -0.5, -0.4867, -0.4733, -0.46, -0.4467, -0.4333, -0.42, -0.4067]

y=[0.0205, 0.0197, 0.0214, 0.0144, 0.0159, 0.0129, 0.0105, 0.0116, 0.0105, 0.0088, 0.0094, 0.0114, 0.009, 0.0102, 0.0099, 0.009, 0.0102, 0.0114, 0.0127, 0.011, 0.0134, 0.0143, 0.019, 0.0215, 0.0272, 0.0245, 0.0341, 0.0379, 0.0436, 0.0504, 0.0607, 0.0744, 0.0793, 0.0834, 0.1061, 0.1202, 0.1339, 0.1357, 0.1751, 0.1773, 0.1738, 0.1885, 0.201, 0.1995, 0.2058, 0.2039, 0.1893, 0.1856, 0.1693, 0.16, 0.1486, 0.1212, 0.1118, 0.0928, 0.0879, 0.0655, 0.0505, 0.0465, 0.039, 0.0308, 0.0304, 0.0259, 0.0221, 0.0205, 0.0212, 0.0196, 0.017, 0.0148, 0.0159, 0.0181, 0.0172, 0.0183, 0.0156, 0.0165, 0.0163, 0.0186, 0.0136, 0.0129, 0.0143, 0.0125, 0.0142, 0.0096, 0.0111, 0.0136, 0.0101, 0.0106, 0.009, 0.0094, 0.0079, 0.0081]

# 创建Parameters实例
params=Parameters()

# 添加初始参数
params.add('a', value=-2.8e-04)
params.add('b', value=0.003)
params.add('int', value=0.2, min=0.01)
params.add('pos', value=-1, min=-1.2, max=0.8)
params.add('G', value=0.05, min = 0.005, max=0.5)

def gaussian(x, int1, pos1, G1):
    return int1*np.exp(-(x-pos1)**2/G1**2)  # 使用numpy的exp函数

model = Model(gaussian)
result = model.fit(y, params, x=x)
print(result.fit_report())

我能通过result.params['a'].stderr提取最优拟合参数的标准误差,测试过是有效的,但自己读库源码推不出这个用法,想问两个问题:

  1. 示例中的result是不是Model类的实例?
  2. stderr是属性吗?

问题解答

  • result不是Model类的实例:model.fit()方法返回的是ModelResult类的对象,这个类专门用来存储拟合的所有结果,包括最优参数、拟合统计量、残差等,和定义模型的Model类是完全不同的两个实体。
  • stderr是属性:result.params里的每个元素都是Parameter类的实例,stderr就是这个类的一个内置属性,用来存储对应参数的标准误差。拟合完成后,lmfit会自动计算该值并赋值给Parameter对象的stderr属性,直接调用即可获取。

内容的提问来源于stack exchange,提问作者Amyx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:00:42