jerry尧 发表于 2025-8-9 23:11

软件滤波中的最小二乘法

本帖最后由 jerry尧 于 2025-8-9 23:13 编辑

最小二乘法(Least Squares Method)是一种数学优化技术,用于通过最小化误差的平方和来拟合数据与模型之间的关系。它广泛应用于回归分析、曲线拟合以及参数估计等领域。给定一组数据点 (xi,yi)(xi​,yi​) 和一个模型 y=f(x,β)y=f(x,β)(其中 ββ 是待估参数),最小二乘法的目标是找到参数 ββ,使得模型预测值与实际观测值之间的残差平方和(RSS)最小:RSS=∑i=1n(yi−f(xi,β))2RSS=i=1∑n​(yi​−f(xi​,β))2线性最小二乘法(最常见形式)当模型是参数的线性组合时(如线性回归),即 f(x,β)=β0+β1xf(x,β)=β0​+β1​x,问题简化为求解以下正规方程组(Normal Equations):XTXβ=XTyXTXβ=XTy其中:
[*]XX 是设计矩阵(包含 xixi​ 和常数项),
[*]yy 是观测值向量,
[*]ββ 是待求参数向量。
解为:β=(XTX)−1XTyβ=(XTX)−1XTy
[*]无偏性:若误差满足零均值、同方差且不相关,最小二乘估计是无偏的。
[*]最优性(高斯-马尔可夫定理):在满足经典假设下,最小二乘估计是最佳线性无偏估计(BLUE)。
[*]对异常值敏感:平方误差会放大离群点的影响,可用稳健回归(如RANSAC)改进。

代码实现

// 最小二乘法拟合函数
void leastSquaresFit(double x[], double y[], int n, double *slope, double *intercept)
{
    double sumX = 0.0, sumY = 0.0, sumXY = 0.0, sumX2 = 0.0;
       // 计算各项和
   for (int i = 0; i < n; i++)
{
      sumX += x;
       sumY += y;
      sumXY += x * y;
       sumX2 += x * x;
   }
       // 计算斜率和截距
   double denominator = n * sumX2 - sumX * sumX;
   if (denominator != 0.0)
{
       *slope = (n * sumXY - sumX * sumY) / denominator;
       *intercept = (sumY - *slope * sumX) / n;
   }
else
{
       // 处理垂直线的情况
       *slope = 0.0;
       *intercept = 0.0;
}
}
非线性最小二乘当模型 f(x,β)f(x,β) 非线性时,需迭代方法(如高斯-牛顿法、Levenberg-Marquardt算法)逼近最优解。应用场景
[*]线性/非线性回归
[*]数据拟合(如指数、多项式拟合)
[*]机器学习(线性回归、正则化变体如岭回归)


页: [1]
查看完整版本: 软件滤波中的最小二乘法