【机器学习chp5】线性回归
推荐文章1,三种角度详细分析了L1,L2正则化的本质。
【王木头 · L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客
推荐文章2,其中有各种梯度下降的优化算法分析。
【王木头·梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam-CSDN博客
前言
本文遗留问题:
(1)第七部分案例分析未完成。
(2)回归任务的性能指标评价还只是很简单的理解,自我还没能力高效地得到回归任务进行性能指标。
(3)线性回归优化算法中的坐标轴下降理解不够深入
目录
前言
一、回归任务简介
二、线性回归模型
三、回归任务的损失函数
1、L2损失函数
(1)定义
(2)L2损失函数的概率解释
(3)残差分布
2、胡伯(Huber)损失函数
(1)Huber损失函数的定义
(2)Huber损失的优缺点
(3)与L1和L2损失的对比
(4)Huber损失的图示理解
(5)sklearn中Huber损失的实现与使用
四、线性回归模型的正则化
1、正则化的前提——数据标准化
2、三种角度分析L1、L2正则化本质
3、弹性网络——L1正则+L2正则
五、线性回归的优化算法
1、方程组直接求解
(1)直接求伪逆
(2)伪逆矩阵的SVD分解
(3)岭回归的直接求解并SVD分解
(4)岭回归的权重衰减(L2正则化使得权重衰减)
(5)Lasso的权重衰减(L1正则化使得大权重衰减小权重剔除)
2、梯度下降
3、坐标轴下降
(1)次梯度法
(2)坐标轴下降法
六、回归任务的模型性能评价
1、评价指标
2、sklearn中的评价方法
3、线性回归模型的超参数调优
4、Scikit-Learn实现的超参数调优工具
七、线性回归案例分析(还未整理)
1、广告费用与产品销量(还未整理)
2、共享单车骑行量预测(还未整理)
八、⭐⭐全文总结⭐⭐
一、回归任务简介
回归任务本质是通过学习数据的规律建立输入与输出的映射关系,其中线性回归是最经典的回归模型之一。要构建高质量的回归模型,需要:
- 数据分析:理解特征与目标变量的关系,选择重要特征。(例如通过散点图/相关系数热力图初步检查目标与特征之间的相关性,优先考虑与目标变量强相关的特征)
- 模型选择:根据问题复杂度选择合适的回归模型(如线性回归、非线性回归或其他算法)。
- 模型评估:通过指标(如MSE、R方值等)评估模型效果,避免过拟合和欠拟合。
二、线性回归模型
核心思想:
- 假设输入特征与输出目标之间的关系可以用一个线性方程表示:
- :截距项。
- :每个特征的权重或回归系数。
- :输入特征的维数。
矩阵形式:
- 通过引入常数项 1 ,公式可以简化为矩阵形式: , 其中 , 。
优化目标:
- 目标函数:最小化预测值与真实值之间的误差(通常为均方误差,MSE):
- 优化方法:通过梯度下降等算法找到使 最小的参数 。
线性回归模型的优缺点:
优点:
- 简单易实现,计算效率高。
- 可解释性强:可以清楚地解释每个特征对输出的贡献。
- 对线性关系的数据表现优秀。
缺点:
- 只能捕捉线性关系,无法拟合非线性数据。
- 对异常值敏感:极端值会显著影响模型效果。
- 假设特征之间相互独立,但现实数据常常存在多重共线性。
三、回归任务的损失函数
1、L2损失函数
(1)定义
- L2损失(也称为均方误差损失)是回归任务中最常用的损失函数。
- 它衡量预测值 和真实值 之间的平方差:
- 预测残差 定义为:
- 所以L2损失实际上是残差的平方:
- 将L2损失累加,可以得到残差平方和(RSS, Residual Sum of Squares) :
性质:L2损失函数是平滑的、可微的,因此非常适合基于梯度优化的方法(如梯度下降)。
(2)L2损失函数的概率解释
当我们假设数据中的误差项服从独立同分布的高斯(正态)分布时,极大似然估计就等价于最小化残差的平方和,也就是最小二乘法。
i、极大似然估计的基本定义
极大似然估计的目标是最大化样本数据的联合概率(似然函数):
其中:
- 是第 个样本的真实输出值;
- 是输入特征;
- 是 的条件概率分布,通常由我们假设的噪声分布决定。
ii、噪声假设:误差服从高斯分布
假设模型预测值和真实值之间的误差服从高斯分布 ,即:
- 这里 是模型的预测值, 是误差。
- 条件概率密度函数为:
iii、构造似然函数
假设每个样本的条件概率 相互独立,则数据集的联合概率(似然函数)为:
iv、取对数:对数似然函数
为了简化计算,通常对似然函数取对数,得到对数似然函数:
将 的具体形式代入,得到:
进一步简化为:
v、极大化对数似然
极大化对数似然等价于最小化以下目标函数:
目标
这实际上就是最小二乘法的目标函数。
vi、总结
- 条件假设:当误差服从正态分布 时,最大化对数似然等价于最小化误差的平方和。
- 结论:极大似然估计在高斯噪声假设下,就等价于最小二乘法。
vii、推广
如果噪声分布不是正态分布(例如Laplace分布),则极大似然估计与最小二乘法不再等价。对于Laplace分布(对称的指数分布),极大似然估计对应的是L1损失。
(3)残差分布
2、胡伯(Huber)损失函数
Huber损失函数是一种结合了L1损失和L2损失优点的损失函数,在模型拟合时对异常值的鲁棒性更强。
(1)Huber损失函数的定义
Huber损失函数在残差较小时采用L2损失(平方误差),在残差较大时采用L1损失(绝对值误差),其数学表达式为:
其中:
- 是一个超参数,决定了切换L1和L2损失的阈值。
- 当残差 小于 时,Huber损失与L2损失一致,具有平滑性和可微性;
- 当残差 大于 时,Huber损失切换为L1损失,对异常值的影响更小。
(2)Huber损失的优缺点
优点
- 对异常值鲁棒:
- 当残差较大时,Huber损失切换为L1形式,从而减小了异常值对模型的影响。
- 与纯L2损失相比,Huber损失对噪声敏感性更低。
- 连续可微:
- 与L1损失相比,Huber损失在切换点()处连续可微,因此可以通过梯度下降等优化算法进行高效优化。
- 灵活性:
- 可以通过调整 参数,在鲁棒性和误差灵敏度之间找到平衡。
缺点
- 参数敏感性:
- 的选取对模型性能有较大影响,需要通过交叉验证等方法进行调优。
- 计算复杂度稍高:
- 相较于简单的L1或L2损失,Huber损失的实现稍微复杂。
(3)与L1和L2损失的对比
L2损失:
- 优点:平滑、可微,适合大部分梯度优化方法。
- 缺点:对异常值敏感,大残差会导致误差平方过大。
L1损失:
- 优点:对异常值鲁棒,不会被大残差放大。
- 缺点:在 处不可导,优化算法可能不稳定。
Huber损失:
- 综合了两者的优点,在 时采用L2损失的平滑性,在 时采用L1损失的鲁棒性。
(4)Huber损失的图示理解
- 当残差较小时,Huber损失与L2损失重合,损失呈二次函数增长;
- 当残差较大时,Huber损失转变为线性增长,与L1损失类似;
- 损失曲线在切换点处连续且可导,具有较好的平滑性。
(5)sklearn中Huber损失的实现与使用
i、sklearn
提供了直接实现Huber损失的回归模型 HuberRegressor:
from sklearn.linear_model import HuberRegressor
# 使用Huber损失进行回归
huber = HuberRegressor()
huber.fit(X_train, y_train)
y_pred = huber.predict(X_test)
ii、SGDRegressor
也可以通过设置 loss='huber'
来使用Huber损失:
from sklearn.linear_model import SGDRegressor
# 随机梯度下降中指定Huber损失
sgd = SGDRegressor(loss='huber')
sgd.fit(X_train, y_train)
y_pred = sgd.predict(X_test)
四、线性回归模型的正则化
1、正则化的前提——数据标准化
其中:
2、三种角度分析L1、L2正则化本质
更详细的内容在推荐文章1,这里仅给出结论。
L2正则的线性回归:岭回归 Ridge
L1正则的线性回归:Lasso
L2正则可视为参数先验分布为正态分布的贝叶斯估计。
3、弹性网络——L1正则+L2正则
弹性网络(Elastic Net)是一种结合了L1正则化(Lasso)和L2正则化(Ridge)的线性回归方法,通过引入线性组合的正则化项来同时控制特征选择和模型复杂度。
弹性网络的目标函数是:
其中:
- :表示模型的残差平方和,是最小二乘部分;
- :L1正则化项,用于稀疏化权重向量 ;
- :L2正则化项,用于防止过拟合;
- :正则化强度的权重,控制正则项对目标函数的影响;
- :L1和L2正则化的权重系数,范围是 :
- :弹性网络退化为L1正则化(Lasso);
- :弹性网络退化为L2正则化(Ridge)。
五、线性回归的优化算法
1、方程组直接求解
(1)直接求伪逆
若二阶海森(Hessian)矩阵:
为正定矩阵,则在临界点目标函数取最小值。
即取最小值的点是一阶偏导为0的点,即
最小二乘回归的目标函数定义为:
计算目标函数对 的梯度:
令梯度为零:
上述方程组 称为正则方程组(Normal Equations)。在 可逆的情况下,可以求出解析解:
其中 称为 的伪逆,写作 。
(2)伪逆矩阵的SVD分解
上面的求解过程需要求 的逆矩阵,可采用数值更稳定的奇异值分解实现,对 进行SVD分解得 ,那么 得伪逆的奇异值分解为
其中 是通过取 中非零奇异值的倒数得到的矩阵;
证明如下:
前提
X 的奇异值分解(SVD)为:
其中:
- 是一个 的正交矩阵,因为对称矩阵的特征向量组成的矩阵。
- 是一个 的对角矩阵,其对角元素是矩阵 的奇异值。
- 是一个 的正交矩阵,因为对称矩阵的特征向量组成的矩阵。
目标
我们要求矩阵 的 SVD 分解。
步骤 1:分析
首先计算矩阵 :
由于 和 都是正交矩阵,满足 和 ,所以得到:
注意到, 是一个 的对角矩阵,且对角元素是 的奇异值的平方,即 ,。因此:
步骤 2:计算
由于 ,且 是正交矩阵(即 ),我们可以得到:
其中, 是 的逆,且由于 是对角矩阵,它的逆矩阵也是对角矩阵,且每个对角元素是原来对角元素的倒数。因此:
其中 是矩阵 的秩。
步骤 3:计算
现在我们计算 :
我们将 代入,得到:
因此,矩阵 可以表示为:
步骤 4:SVD 分解
最后,我们要对 进行 SVD 分解。由于 和 都是正交矩阵,矩阵 的 SVD 结构是:
因此,我们可以得到 的 SVD 分解为:
所以,矩阵 的 SVD 分解是:
(3)岭回归的直接求解并SVD分解
岭回归目标函数
岭回归目标函数为误差平方和+L2 正则化项,为
梯度推导
目标函数对 求梯度,得到:
令梯度为零:
即得
结合 SVD 分解
利用 SVD 的性质,计算:
从而有:
进一步化简:
因此:
将结果代入:
如果用对角奇异值矩阵 表示 ,则:
(4)岭回归的权重衰减(L2正则化使得权重衰减)
这部分在推荐文章1中有详细分析。
(5)Lasso的权重衰减(L1正则化使得大权重衰减小权重剔除)
这部分在推荐文章1中有详细分析。
2、梯度下降
推荐文章2中有关于梯度下降的各种优化算法。
方程组直接求解中,当矩阵 非常大时,SVD的计算量大,甚至不能载入内存。此时可用迭代方式求解。梯度下降法是求解无约束优化问题最常采用的方法之一。
损失函数对梯度的影响
3、坐标轴下降
(1)次梯度法
在优化问题中,经典的梯度下降法要求目标函数可微。然而在某些实际场景下,比如 L1 正则化(如 Lasso 回归)中的目标函数,包含非光滑点(例如 在 处不可导)。为了解决这一问题,引入了次梯度法(Subgradient Method),扩展了梯度下降法的适用范围。
次梯度的定义
对于一个凸函数 ,如果在点 处不可导,定义次梯度 满足以下关系:
- 是 在 的一个次梯度;
- 所有次梯度的集合称为次梯度集合,记为 。
几何意义
- 次梯度对应的直线(或超平面)是目标函数 在点 处的下方支持平面;
- 即使函数不可微,仍可以找到一个线性近似,描述函数的局部行为。
L1 范数的次梯度
对于 ,次梯度集合如下:
在 Lasso 回归中,目标函数 的次梯度为:
(2)坐标轴下降法
坐标轴下降法的定义
坐标轴下降法(Coordinate Descent)是一种迭代优化算法,适用于目标函数分解为各个变量的单独优化问题的场景。其核心思想是:
- 在每次迭代中,仅优化目标函数中一个变量,固定其余变量;
- 每次优化沿着当前变量所在的坐标轴方向进行单变量优化。
在高维优化问题中,坐标轴下降法具有计算效率高和实现简单的优势。
坐标轴下降法的应用
在 Lasso 中,坐标轴下降法可以很好地解决上述问题。每次优化时:
- 选取一个维度 ,其他变量 固定不变;
- 优化目标函数对 的次梯度或次微分。
坐标轴下降法的具体步骤
步骤 1:初始化
- 设定初始参数 或随机初始化;
- 计算每个维度的初始值。
步骤 2:更新某一维度的参数
对目标函数:
- 选择第 个变量 ,计算该维度对应的次微分;
- 更新规则:
这里:
- 是目标函数在第 维的平方系数;
- 是当前维度与残差的相关性。
步骤 3:循环更新直到收敛
- 更新所有维度 ;
- 判断收敛条件(如参数更新量或目标函数值的变化足够小),否则返回步骤 2。
-
最优解条件:
Lasso的坐标轴下降求解
六、回归任务的模型性能评价
1、评价指标
评价指标是用于衡量回归模型预测性能的关键工具。这部分提到的指标包括:
-
开方均方误差RMSE (Rooted Mean Squared Error): 计算预测值和实际值之间误差的平方和的平均值,然后取平方根。它能够较大程度地放大大的预测误差。
-
平均绝对误差MAE (Mean Absolute Error): 计算预测值和实际值之间绝对误差的平均值。相比于RMSE,它对异常值的敏感性较低。
-
绝对误差中值MedAE (Median Absolute Error): 计算预测值和实际值之间绝对误差的中位数,进一步降低了异常值对评价的影响。
-
平均平方log误差MSLE (Mean Squared Logarithmic Error): 适用于目标变量增长幅度较大的场景(如指数增长数据)。
-
分数: 衡量模型解释变量之间变化的比例,值越接近1,模型越好。它基于两部分:残差平方和()和总平方和()。
是残差平方和:
是目标变量的总平方和:
-
已解释的方差分数(Explained Variance Score)是回归模型的另一个重要评价指标,用于衡量模型对目标变量的方差解释能力。它定义为:
其中:
:残差的方差,表示预测值与真实值的误差的变异程度。
: 真实目标变量的方差,表示目标变量本身的变异程度。
如果模型能够完美预测目标变量,则,从而。这是最理想的情况。
如果模型完全没有预测能力,导致预测值与真实值之间的差异方差等于目标变量本身的方差,则。
值可以小于0,表示模型预测能力比一个简单的平均值预测(即使用均值作为预测值)还要差。
2、sklearn中的评价方法
sklearn提供了多种方法用于计算上述指标:
- Estimator的
.score()
方法: 通常默认返回 分数。 - Metric模块: 提供了单独计算上述指标的API。
- Scoring参数: 用于交叉验证时指定模型性能的评价指标。
例如,metrics.mean_absolute_error
计算MAE,metrics.r2_score
计算R2R^2R2。
3、线性回归模型的超参数调优
回归模型的超参数调优(如正则化系数)可以通过以下方法实现:
-
交叉验证:
- RidgeCV、LassoCV和ElasticNetCV分别实现岭回归、Lasso和弹性网络的交叉验证。
-
AIC/BIC准则:
- 基于信息准则,用于正则化模型的选择:
- 基于信息准则,用于正则化模型的选择:
-
留一交叉验证 (LOOCV):
- 特殊形式的交叉验证,每次使用一个样本作为验证集,剩余样本作为训练集。
-
广义交叉验证 (GCV):
- 对LOOCV的近似,用于减少计算量。
4、Scikit-Learn实现的超参数调优工具
-
RidgeCV:
- 自动搜索一组正则化参数α\alphaα中的最佳值。
- 支持多种交叉验证方法,如GCV、LOOCV。
-
LassoCV:
- 提供自动选择正则化参数 的方法,支持用户设置 范围和数量。
七、线性回归案例分析(还未整理)
两个案例:
1、广告费用与产品销量(还未整理)
2、共享单车骑行量预测(还未整理)
八、⭐⭐全文总结⭐⭐
本文首先介绍了回归任务简介和线性回归模型,然后介绍了损失函数,有L2损失和L1损失,L2损失的梯度是和偏离程度有关,受特异值影响大,L1损失的梯度恒定-1或1,受特异值影响小,但在0处不可微。其次,当误差项服从高斯分布时,极大似然估计等价于最小化残差平方和(用L2损失最小)。当误差服从拉普拉斯分布时,极大似然估计等等价于最小化L1损失。结合最小化L1损失鲁棒性强和L2损失处处可微的优点,给出了胡伯损失函数。
在第四部分,介绍了回归模型的正则化,正则化由于对每个特征的参数都是等地位的,所以要对特征进行数据标准化,L1正则化相当于先验服从拉普拉斯分布的贝叶斯估计;L2正则化相当于先验服从高斯分布的贝叶斯估计。还从权重衰减角度介绍了正则化,最后又结合了L1正则化和L2正则化的优点,介绍了弹性正则化。
在第五部分,介绍了线性回归模型的优化算法,在直接接方程组中,参数w可以直接利用X的伪逆解出,但X维度高时计算复杂,不稳定,所以采用SVD分解,对X伪逆进行了SVD分解。其次,还介绍了正则化后的线性回归方程组的直接求解和SVD分解求出的解。然后,介绍了梯度下降,各种梯度下降的优化方法,梯度下降时可采用L2损失的梯度下降还可以采用L1损失的梯度下降,但更好的还是结合他们的优点,损失的绝对值值大时,采用L1损失,损失的绝对值小时,采用L2损失的梯度下降。随后介绍了坐标轴下降,主要用在Lasso回归的梯度下降,首先介绍了次梯度下降,即用次梯度代替梯度进行梯度下降,对于介绍坐标轴下降,主要采用单个维度的次梯度下降,即对参数w的单个维度进行次梯度下降,优化目标是0属于该维的次梯度集。
在第六部分介绍了各种回归任务性能的评价指标。