简介:本教程面向开发者与数据应用人员,系统讲解最小二乘拟合的完整实施路径:从理解残差平方和准则,到选择函数类、构建目标函数、求解参数,再到结果验证与常见问题排查。读完即可掌握一套可复用的拟合流程与优化思路。
本教程要帮助读者完成一件明确的任务:给定一组观测数据,使用最小二乘法拟合出一个能描述数据规律的函数模型,并验证拟合结果是否可靠。 具体而言,读者将学会:
本文适合具备基础编程能力与高中及以上数学知识的开发者、数据分析人员、算法工程师及技术负责人阅读。阅读前建议了解基本的向量运算、矩阵概念与函数求导思想;若计划落地到工程代码,还需具备一种通用编程语言的编写能力。
最小二乘法是数据建模中最基础、最常用的参数估计方法之一,典型应用包括:
当数据量适中、模型形式可假设、且误差近似服从零均值分布时,最小二乘通常是首选方案。若数据存在严重离群点或模型形式完全未知,则需要先做数据清洗或改用更稳健的估计方法。
在动手实施前,请确认以下条件:
最小二乘法的核心思想是:在给定的函数类中,寻找一组参数,使模型预测值与观测值之间的偏差尽可能小。偏差用残差表示:
将所有残差平方后求和,得到残差平方和函数:
为什么用平方而不是绝对值? 原因有三:一是平方后正负偏差不会相互抵消;二是平方函数处处可导,便于用求导或矩阵方法求极值;三是平方放大了较大偏差的影响,使拟合更关注整体误差而非个别点。需要注意,平方也意味着模型对离群点敏感,这是后续排查的重点。
做什么:把 $E$ 写成待求参数的函数。例如线性模型 $\phi(x)=a_0+a_1x$,则 $E(a_0,a_1)=\sum(y_i-a_0-a_1x_i)^2$。
函数类的选择直接决定拟合能力与泛化能力:
选择原则:先用最简单的模型试拟合,若残差呈现明显系统性规律(如弯曲、周期性),再提升模型复杂度。切忌一开始就用高阶模型”硬凑”数据。
当模型对参数是线性的(如多项式),可将问题写成矩阵形式。设设计矩阵 $A$ 的第 $i$ 行为 $[1, x_i, x_i^2, \dots, x_i^m]$,参数向量为 $\theta$,观测向量为 $y$,则残差平方和为:
对 $\theta$ 求导并令其为零,得到正规方程:
当 $A^T A$ 可逆时,解为 $\theta = (A^T A)^{-1}A^T y$。工程上通常不直接求逆,而是用矩阵分解方法求解,以提升数值稳定性。示意性伪代码如下:
输入: 样本点 X, 观测值 y, 多项式阶数 m构造设计矩阵 A: 每行 [1, x, x^2, ..., x^m]求解 theta 使 ||A·theta - y|| 最小 // 使用矩阵分解方法输出: theta
注意:阶数升高时设计矩阵列之间相关性增强,容易出现病态问题,表现为参数数值巨大且不稳定。此时应降低阶数或对自变量做中心化、归一化处理。
当模型对参数非线性(如 $\phi(x)=ae^{bx}$ 中的 $b$)时,正规方程不再适用,需要迭代优化:
关键点:非线性最小二乘对初值敏感,初值选取不当可能收敛到局部极小或发散。建议先用数据特征估算初值(如指数模型可由半衰期估计 $b$),或先对数据做变换转为线性问题求近似解。
拟合完成后不能只看”曲线贴不贴”,要定量验证:
| 配置项 | 含义 | 常见取值逻辑 | 风险提示 |
|---|---|---|---|
| 模型阶数/形式 | 决定拟合能力 | 从低阶开始逐步增加 | 过高导致过拟合与数值不稳定 |
| 迭代初值 | 非线性优化的起点 | 依据数据特征估算 | 不当初值导致不收敛或局部解 |
| 收敛阈值 | 迭代停止条件 | 依据精度需求设定 | 过松精度不足,过紧浪费时间 |
| 数据归一化 | 对自变量做缩放 | 量纲差异大时启用 | 未归一化易致病态矩阵 |
本教程围绕最小二乘拟合的完整链路展开:以残差平方和 $E=\sum(y_i-\phi(x_i))^2$ 为准则,选择合适的函数类,线性情形用正规方程与矩阵分解求解,非线性情形用迭代优化求解,最后通过残差分析与留出验证判断结果可靠性。核心要点可归纳为三句话:准则决定优化方向,函数类决定拟合能力,验证决定结论可信度。 后续可继续关注稳健估计、正则化约束以及误差方差加权的扩展方法,以应对更复杂的数据场景。