本帖最后由 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+β1x,问题简化为求解以下正规方程组(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算法)逼近最优解。 应用场景线性/非线性回归 数据拟合(如指数、多项式拟合) 机器学习(线性回归、正则化变体如岭回归)
|