最小二乘法之线性回归篇(普通最小二乘OLS、加权最小二乘WLS、广义最小二乘GLS)-原理讲解
关于最小二乘法(Least Squares Method)
最小二乘法是一种以最小化误差平方(1)为指导思想的拟合、优化算法。其英文直译为“最小化平方和的方法”,故通常直接称为最小二乘法。
(1)
误差平方公式中,i为样本维度(包含m个样本),y为预测值,为构建的拟合函数。
最小二乘法方法是一种非常宽泛的概念,其分类如下所示。最小二乘法的内核是线性的,但其同样可用于求解非线性的估计,如迭代重加权最小二乘法。“最小二乘法仅可用于线性拟合的求解问题”这一观点是错的,在论文等严肃场景的表述中需要注意这一问题。
本章最主要针对常见的线性最小二乘法,循序渐进,梳理和讲解普通最小二乘法、加权最小二乘法和广义最小二乘法。
最小二乘法的常见分类
一、基础分类
1. 线性最小二乘法(Linear Least Squares)
-
普通最小二乘法(OLS, Ordinary Least Squares)
-
加权最小二乘法(WLS, Weighted Least Squares)
-
广义最小二乘法(GLS, Generalized Least Squares)
2. 非线性最小二乘法(Nonlinear Least Squares)
- 迭代重加权最小二乘法(Iterative Reweight Least Square)
非线性常通过迭代算法(如高斯-牛顿法、梯度下降法)求解最小化残差平方和的参数估计。
问:那通过深度学习模型以优化误差平方损失的方法属不属于非线性最小二乘法?
不属于最小二乘法,虽然两者都是最小化误差平方损失来更新参数,深度学习更新的是网络模块中的参数,而非线性最小二乘法则更新的是“预设”好的非线性公式(如式2)。尽管两者宏观思想一致,都是利用梯度方法更新预设的框架(网络模型、拟合公式),但为避免混淆,称呼上进行了区分。
(2),参数 θ=(a,b,c)。
二、改进与变体
- 阻尼最小二乘法(DLS, Damped Least Squares)
- 正交最小二乘法(Orthogonal Least Squares)
- 总体最小二乘法(TLS, Total Least Squares)
三、跨领域应用变体
- 7. 偏最小二乘回归(PLS, Partial Least Squares Regression)
- 8. 贝叶斯最小二乘法(Bayesian Least Squares)
为什么是误差平方?
作为经典的拟合模型,最小二乘法为什么不用绝对误差或高阶误差求解,偏偏选择误差平方?
假设我们现在用一个样本量为m,n个特征的数据库预测其属性Y。样本库可以写为:
样本 | 属性1 | ... | 属性n | 预测值 |
样本1 | ... | |||
样本2 | ... | |||
... | ... | ... | ... | ... |
样本m | ... |
我们需要构造这n个特征与目标属性的线性关系。拟合线性公式可以写为式(3):
(3)
基于数据库信息,配合线性公式我们可以写出(4),其中是误差项
(4)
不妨将式4写成矩阵形式
(5)
将上式用符号简写为
(6)
OK, 现在已知和
,
取值为何值时?
的概率最大?
一般而言,误差来源符合正态分布,那么误差项的概率密度为,其中
为理想情况(即无偏度的情况)。
为方差。当X、H取值都确定时,“让
的概率最大”,也就是求该条件下,
最有可能的取值。
将这个问题用概率进行描述,用极大似然法表示有:
参考:底层逻辑之:极大似然方法(Maximum Likelihood Estimation, MLE)_极大似然法-CSDN博客
两边取对数:
其中唯一影响概率取值的是
这一项。当观测数据满足无偏性假设时(即实际观测值围绕真实值呈对称分布
),误差平方和即
达到最小值时,模型参数
的估计值具有最高的概率密度,实现
的概率最高。这一特性恰好对应了最小二乘法的核心思想——通过最小化误差平方和来获得最优参数估计。
因此相较于如绝对误差或高阶误差:、
,误差平方
和与概率密度函数的匹配度更高,因此能够更准确地反映统计意义上的最优解。
普通最小二乘法(OLS, Ordinary Least Squares)
因此,我们的目标就是使线性公式的结果与真值
尽可能的相近。
将6带入到误差平方公式中
注:
(*1)
(7)
其中,X和Y都是已知的参数,我们要讨论矩阵如何取值,使得Loss最小,也就是求其极值。因此我们对式7关于
进行求导:
因为
又因为
,
令
即,就是普通最小二乘法的解。
OLS MATLAB示范代码:
% 假设输入数据:
% X - m×n 矩阵(m个样本,n个特征)
% H - m×1 向量(观测值)% 添加偏置项(可选,若模型需要截距项)
% X = [ones(m,1), X]; % 取消注释以添加全1列% 核心计算(两种等效写法)
theta_method1 = X \ H; % 推荐写法:MATLAB左除运算符自动优化
theta_method2 = (X'*X) \ (X'*H); % 显式OLS公式% 验证结果
predicted_H = X * theta_method1;
mse = mean((H - predicted_H).^2); % 计算均方误差% 显示结果
disp('Estimated parameters:');
disp(theta_method1);
disp(['Mean Squared Error: ', num2str(mse)]);
加权最小二乘法(Weighted Least Squares, WLS)
普通的最小二乘法存在一些不足,要知道所有的训练样本的信息都存在各种误差。不同来源的训练样本的可靠性可能存在差异,比如测量误差:如甲采集的数据会比乙有更小的测量误差。但是普通最小二乘法无法将这些样本进行区分,没办法的更好利用这些具有异方差性质(随机误差项方差非恒定)的信息。这会导致估计偏差,比如在差样本比好样本更多的情况下以及样本量偏少情况下训练模型,模型实际的表现将不尽人意。因此,在不满足Gauss-Markov定理条件的情况下,普通最小二乘法无法达到最优线性无偏性(BLUE),不是最优模型。
最优线性无偏性(BLUE, Best Linear Unbiased Estimator)
优线性无偏性(BLUE, Best Linear Unbiased Estimator)是统计推断中衡量估计量优劣的核心准则,由Gauss-Markov定理定义。其核心含义为:在满足特定条件下,某个线性估计量是所有线性无偏估计量中方差最小的,因此被称为“最优”。
BLUE的性质成立需满足以下假设(经典线性回归模型的基本假设):
- 线性性:模型为参数的线性函数,即
![]()
- 零均值误差:误差项的平均值为零。
- 同方差(Homoscedasticity):误差项的方差为常数,即
。
- 无自相关(No Autocorrelation):误差项之间不相关,即
。
- 外生性(Exogeneity):解释变量 X 与误差项 ε 不相关,即
。
- 无多重共线性:解释变量之间无完全线性关系(否则矩阵 X′X 不可逆)
为了解决这个问题,我们希望对最小二乘法进行一定的改进,使得求解线性权重的更关注高质量的样本。那需要怎么做呢?我们需要对普通最小二乘法填加一个参数修饰的矩阵,来改变不同样本变量在计算中的贡献。
这是普通最小二乘法的公式:
我们在两边加一个权重矩阵,来修饰不同样本的重要性。即:
使得新的误差项,中的不同样本误差元素在在缩放后实现同方差。
其中,权重矩阵的定义为:
即:
那么,我们的损失函数将变为:
接下来我们估计重施求解梯度为0时的状态
对其求的偏导:
因为
又因为
,
令
OK,可以看出来,加权最小二乘法也就比普通最小二乘法多了个W参数,然而,W是人为设定的,这里面包含着一些“经验主义的味道”,既然是人为设定的,那如何人为的确定W?有常见的几种方法:
方差倒数法(Inverse Variance Weighting):
将样本权重w与其样本的误差方差进行倒数关联:
即
式中,为样本的误差方差。
误差方差
怎么得到?
其既不是某一样本内部不同属性形成的方差,也不是是相同属性不同样本形成的方差。而是一种先验参数。
具体而言:我有两组样本,我只知道样本组1的测量误差是1%,而样本组2测量误差5%。假设这是理想样本,测量误差为0时,可以实现完全的线性拟合。那么此时测量误差等价样本的误差项,误差项完全由测量误差引起。那么对于组1和组2的样本,其对应的
分别为1%和5%
方差倒数法可以优化样本数据存在异常、或者噪声更大的情况。比如:人的食品消费占比统计,与普通人相比,富二代与土豪更容易乱花钱,其的误差方差就很高,如果用方差倒数法的加权最小二乘法,就可以有效限制这些样本的影响,让模型对普通人的拟合更好。
指数权重法(Exponential Weighting)
另一种情况,就是时间对拟合存在影响,因此希望加权最小二乘法,尽量考虑近期的数据。
一般会采用指数的形式,为其赋予权重
其中是人为设计的衰减因子,t是下一个时间点,i代表时间的序列参数。当i为1时,对应是一号样本,也就是时间最近的一个样本。
这是一种很朴素的方法,有一些优化效果。比如金价、汇率的预测,可以去除些泡沫或者被低估的问题。
贝叶斯权重(Bayesian Weighting)
如果同时考虑采样样本占比和其在真实样本群的占比,以及该样本的参数下,预测目标的统计属性。我们可以写出理想的样本权重描述。
即:
为该样本出现的概率(其参数为
),
为似然函数,代表给定参数
的情况下,预测目标为
的可能性。
代表正相关。
这是一种理想的情况,比如当我们预测一个男人体内的雄性激素含量时,对于一个雄性激素含量为y的55岁训练样本,我们给予它的权重为:55岁样本的真实占比乘以55岁雄性激素为y的占比。
这种做法可以在具有先验知识的条件下,利用有限的样本构建出更好的模型。比如你的训练数据中老年人较多,而实际分布是老年人较少,因此你可以利用这些统计指标使得模型会较少的依赖老年样本。
WLS的MATLAB代码示范:
% 加权最小二乘法示例
% 目标:拟合 H = X*theta + error,其中不同数据点具有不同权重%% 1. 生成示例数据(可替换为实际数据)
m = 100; % 样本数量
n = 3; % 特征维度(包含截距项)
X = [ones(m,1), randn(m,n-1)]; % 设计矩阵(第一列为截距项)
true_theta = [2; 1.5; -0.8]; % 真实参数
H = X * true_theta + randn(m,1).*linspace(1,5,m)'; % 添加异方差噪声%% 2. 定义权重矩阵(核心步骤)
% 权重选择策略:假设噪声方差与自变量X的第二列成正比
w = 1 ./ (X(:,2).^2); % 权重向量(需转换为对角矩阵)
W = diag(w); % 构造权重矩阵%% 3. 加权最小二乘求解
theta_wls = (X' * W * X) \ (X' * W * H); % WLS解%% 4. 结果对比(可选)
% 普通最小二乘解(对比用)
theta_ols = X \ H;% 预测值计算
H_pred_wls = X * theta_wls;
H_pred_ols = X * theta_ols;% 计算加权误差
weighted_mse = mean(w .* (H - H_pred_wls).^2);%% 5. 结果展示
disp('=== 参数估计结果 ===');
fprintf('%-10s %-10s %-10s\n', '参数', '真实值', 'WLS估计');
for i = 1:nfprintf('theta_%d: %-10.4f %-10.4f\n',...i-1, true_theta(i), theta_wls(i));
endfprintf('\n加权MSE: %.4f\n', weighted_mse);%% 6. 可视化(可选)
figure;
subplot(2,1,1);
scatter(X(:,2), H, 20, w, 'filled'); % 权重可视化
colorbar; title('数据点权重分布');
xlabel('X_2'); ylabel('H');subplot(2,1,2);
plot(X(:,2), H, 'ko', 'DisplayName','原始数据'); hold on;
plot(X(:,2), H_pred_wls, 'r-', 'LineWidth',2, 'DisplayName','WLS拟合');
plot(X(:,2), H_pred_ols, 'b--', 'LineWidth',2, 'DisplayName','OLS拟合');
xlabel('X_2'); ylabel('H'); legend show;
title('拟合结果对比');
广义最小二乘法(GLS, Generalized Least Squares)
绝大多数原始的试验数据难以最优线性无偏性的要求。而在大多数试验中,精确地获取先验知识并不是一件简单事情,因此加权最小二乘法并不能完美的解决这一问题。其次加权最小二乘法更加针对异方差的问题,若存在变量X与误差项存在相关性,加权最小二乘法便无法解决这一联系。
那有没有一种方法,可以将原始数据进行一定的变化,使其满足最优线性无偏性的要求,再进一步使用OLS。就可以解决这一问题了。
回头看 BLUE的性质成立需满足以下假设(经典线性回归模型的基本假设)
- 线性性:模型为参数的线性函数,即
- 零均值误差:误差项的平均值为零。
- 同方差(Homoscedasticity):误差项的方差为常数,即
。
- 无自相关(No Autocorrelation):误差项之间不相关,即
。
- 外生性(Exogeneity):解释变量 X 与误差项 不相关,即
。
- 无多重共线性:解释变量之间无完全线性关系(否则矩阵 X′X 不可逆)
其中,误差的无多重共线性和零均值误差是无法通过算法变化满足的条件。
即数据本身需要满足:, 且误差项的协防差矩阵为正定。
即 ,设误差项的协防差:
(协防差为对称正定矩阵)
假设变化后的式子为
使得误差项的协防差满足,其中
为单位矩阵,
为方差(标量,标准化后为1)。
此时,方差恒定(Homoscedasticity),非对角元素为0,误差项独立(Independence)。
若想要实现
,我们需要构造一个矩阵
当即矩阵乘以其逆时,为单位矩阵。
又已知,当满足 A 是常数矩阵、B 是随机向量时,有
可以写为:
因此,我们可以取巧地令,此时
。
代入可得:
根据对称正定矩阵的平方根性质有:
和
为对称矩阵
即:
此时,对于:满足BLUE的要求。
在此基础上我们对其进行经典最小二乘法处理(详细过程可以参考加权最小二乘法):
可解得
实际应用中,
未知,需先用OLS残差估计 Ω 的结构参数,再迭代计算,称为可行性广义最小二乘法(FGLS)。
FGLS MATLAB代码:
function theta = fgls(X, Y, max_iter, tol)% 输入参数:% X - m×n 设计矩阵% Y - m×1 观测值向量% max_iter - 最大迭代次数(默认100)% tol - 收敛阈值(默认1e-6)% 输出:% theta - 估计的参数向量% 参数设置if nargin < 3max_iter = 100;endif nargin < 4tol = 1e-6;end% 初始OLS估计theta = X \ Y;e = Y - X * theta;for iter = 1:max_iter% 估计协方差矩阵结构(示例:异方差模型)% 注意:此处应根据实际模型修改Omega的估计方式sigma2_hat = e.^2; % 异方差估计Omega_hat = diag(sigma2_hat);% 防止数值不稳定(可选)% Omega_hat = Omega_hat + 1e-8*eye(size(Omega_hat));% Cholesky分解进行GLS估计[L, p] = chol(Omega_hat, 'lower');if p ~= 0warning('Cholesky分解失败,使用伪逆代替');theta_new = pinv(X'*pinv(Omega_hat)*X) * X'*pinv(Omega_hat)*Y;elseX_trans = L \ X;Y_trans = L \ Y;theta_new = X_trans \ Y_trans;end% 检查收敛if norm(theta_new - theta) < tolfprintf('收敛于第%d次迭代\n', iter);break;end% 更新参数和残差theta = theta_new;e = Y - X * theta;end
end