【Python】使用LM算法根据数据样本拟合近似函数
摘要:LM(Levenberg-Marquardt)算法是一种结合梯度下降与高斯-牛顿法优点的非线性优化算法,适用于最小二乘问题求解。其特点包括收敛速度快、数值稳定性好,广泛应用于数据拟合、参数估计等领域。本文通过Python代码示例,展示了使用scipy库中的curve_fit函数实现多项式拟合的过程,并对比了不同多项式阶数的拟合效果。结果表明,高阶多项式通常能获得更好的拟合效果,但需根据实际数
目录
五、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~
一、LM算法简介:
LM(Levenberg-Marquardt)算法是一种结合梯度下降法和高斯-牛顿法优点的非线性优化算法,专门用于求解非线性最小二乘问题。它通过动态调整阻尼因子(λ)在两种方法之间平衡,兼顾了收敛速度和数值稳定性,广泛应用于参数估计、曲线拟合、机器学习等领域。
二、特点与优势:
1、收敛速度快
在接近最优解时,利用高斯-牛顿法的二阶信息加速收敛;在远离最优解时,通过梯度下降保证稳定性。
2、数值稳定
通过阻尼因子 λλ 避免雅可比矩阵 JJ 的病态问题(如奇异矩阵),减少发散风险。
3、适用场景
非线性最小二乘问题:如实验数据拟合、模型参数估计。
机器学习:神经网络训练、正则化优化。
工程领域:图像处理、机器人路径规划、信号处理等。
三、代码及注释
本例程使用Python编程,直接调用scipy第三方库中的LM算法API实现对应功能,如果没有安装scipy库,请先使用pip命令安装——pip install scipy。
import matplotlib #导入matplotlib库
matplotlib.use('TkAgg') #使用TkAgg终端来显示图片
from scipy.optimize import curve_fit #导入curve_fit库,内含LM非线性优化算法
import matplotlib.pyplot as plt
import numpy as np #导入矩阵库
#样本数据集,(x,y)二维坐标点
x = [425, 495.4, 493, 686, 893.2, 892.3, 1227.2, 1235.6, 1560, 1750.2, 1741.8]
y = [100, 150, 150, 250, 350, 350, 500, 500, 625, 750, 750]
#需要使用哪个拟合函数,就解注释
def func(x,k1,k2,k3,k4,k5,b): #定义5次多项式拟合函数
return k1*x**5 + k2*x**4 + k3*x**3 + k4*x**2 +k5*x +b
# def func(x,k1,k2,k3,k4,b): #定义4次多项式拟合函数
# return k1*x**4 + k2*x**3 + k3*x**2 + k4*x +b
# def func(x,k1,k2,k3,b): # 定义3次多项式拟合函数
# return k1*x**3 + k2*x**2 + k3*x + b
# def func(x,k1,k2,b): #定义2次多项式拟合函数
# return k1*x**2 + k2*x + b
# def func(x, a, b): #定义1次多项式拟合函数
# return a * x + b
# def func(x, a, b, c): #定义指数拟合函数
# return a * np.exp(b * x) + c
#调用LM算法实现数据拟合
popt, pcov = curve_fit(func, x, y)
print("Optimized parameters:", popt)
#设置横纵坐标轴范围
x_fit = np.linspace(min(x), max(x), 5000)
y_fit = func(x_fit, *popt)
#开始画图,输出拟合函数参数
plt.scatter(x, y, label='Data')
plt.plot(x_fit, y_fit, 'r-', label='Fitted Curve')
plt.legend()
plt.show()
四、获取拟合函数系数及效果图
1、使用二次多项式函数对样本数据进行拟合:

图中输出的 Optimized parameter: 即对应二次多项式 k1*x**2 + k2*x + b 中的k1、k2、b三个系数。
2、使用五次多项式函数对样本数据进行拟合:

可以看到,相较于2次多项式,5次多项式对变化曲线的拟合效果更好,在实际应用时,根据自己的样本数据变化特点选择合适的拟合函数,也可以自己设计拟合函数来进行曲线拟合,并获取拟合参数。
五、如果这篇文章能帮助到你,请点个赞鼓励一下吧ξ( ✿>◡❛)~
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)