套索回归简介
在普通的多元线性回归中,我们使用一组p 个预测变量和一个响应变量来拟合以下形式的模型:
Y = β 0 + β 1 X 1 + β 2 X 2 + … + β p
金子:
- Y :响应变量
- X j :第 j个预测变量
- β j :在保持所有其他预测变量不变的情况下,X j增加 1 个单位对 Y 的平均影响
- ε :误差项
β 0 , β 1 , B 2 , …, β p的值使用最小二乘法选择,该方法最小化残差平方和 (RSS):
RSS = Σ(y i – ŷ i ) 2
金子:
- Σ :希腊符号,意思是和
- y i :第 i 个观测值的实际响应值
- ŷ i :基于多元线性回归模型的预测响应值
然而,当预测变量高度相关时, 多重共线性可能会成为一个问题。这可能会使模型系数估计不可靠并表现出较高的方差。也就是说,当模型应用于以前从未见过的新数据集时,它很可能表现不佳。
解决这个问题的一种方法是使用一种称为lasso 回归 的方法,该方法旨在最大限度地减少以下问题:
RSS + λΣ|β j |
其中j从 1 到p并且 λ ≥ 0。
等式中的第二项称为提款罚金。
当 λ = 0 时,该惩罚项不起作用,套索回归产生与最小二乘相同的系数估计。
然而,当 λ 接近无穷大时,去除惩罚的影响力变得更大,不可导入模型的预测变量会减少到零,有些甚至会从模型中去除。
为什么使用 Lasso 回归?
套索回归相对于最小二乘回归的优点是 偏差-方差权衡。
回想一下,均方误差 (MSE) 是我们可以用来衡量给定模型准确性的指标,其计算公式如下:
MSE = Var( f̂( x 0 )) + [偏差( f̂( x 0 ))] 2 + Var(ε)
MSE = 方差 + 偏差2 + 不可约误差
lasso回归的基本思想是引入一个小的偏差,使得方差可以显着减小,从而导致整体MSE较低。
为了说明这一点,请考虑下图:
请注意,随着 λ 的增加,方差显着减小,而偏差的增加非常小。然而,超过某一点后,方差下降的速度会减慢,系数的下降会导致系数的显着低估,从而导致偏差急剧增加。
从图中我们可以看出,当我们选择在偏差和方差之间产生最佳权衡的 λ 值时,检验的 MSE 最低。
当 λ = 0 时,套索回归中的惩罚项不起作用,因此产生与最小二乘相同的系数估计。然而,通过将 λ 增加到某个点,我们可以降低测试的整体 MSE。
这意味着通过套索回归进行模型拟合将比通过最小二乘回归进行模型拟合产生更小的测试误差。
Lasso 回归与 Ridge 回归
Lasso 回归和Ridge 回归都被称为正则化方法,因为它们都试图最小化残差平方和 (RSS) 以及某个惩罚项。
换句话说,它们限制或规范了模型系数的估计。
然而,他们使用的惩罚条款略有不同:
- Lasso 回归尝试最小化RSS + λΣ|β j |
- 岭回归尝试最小化RSS + λΣβ j 2
当我们使用岭回归时,每个预测变量的系数都会减少到零,但它们都不能完全为零。
相反,当我们使用套索回归时,当 λ 足够大时,某些系数可能完全为零。
用技术术语来说,套索回归能够生成“稀疏”模型,即仅包含预测变量子集的模型。
这就引出了一个问题:岭回归还是套索回归更好?
答案是:视情况而定!
在只有少量预测变量显着的情况下,套索回归往往效果更好,因为它能够将不显着的变量完全减少到零并将其从模型中删除。
然而,当许多预测变量在模型中显着并且它们的系数近似相等时,岭回归往往效果更好,因为它将所有预测变量保留在模型中。
为了确定哪个模型在做出预测方面最有效,我们执行k 折交叉验证。产生最低均方误差 (MSE) 的模型就是最好使用的模型。
在实践中执行套索回归的步骤
以下步骤可用于执行套索回归:
步骤1:计算预测变量的相关矩阵和VIF值。
首先,我们需要生成一个相关矩阵并计算每个预测变量的VIF(方差膨胀因子)值。
如果我们检测到预测变量和高 VIF 值之间存在很强的相关性(一些文本将“高”VIF 值定义为 5,而其他文本则使用 10),那么套索回归可能是合适的。
但是,如果数据中不存在多重共线性,则可能不需要首先执行套索回归。相反,我们可以执行普通的最小二乘回归。
步骤 2:拟合套索回归模型并选择 λ 值。
一旦我们确定套索回归合适,我们就可以使用 λ 的最佳值来拟合模型(使用流行的编程语言,如 R 或 Python)。
为了确定 λ 的最佳值,我们可以使用不同的 λ 值拟合多个模型,并选择 λ 作为产生最低 MSE 检验的值。
步骤 3:将 lasso 回归与岭回归和普通最小二乘回归进行比较。
最后,我们可以将套索回归模型与岭回归模型和最小二乘回归模型进行比较,以确定哪个模型使用 k 折交叉验证产生最低的 MSE 测试。
根据预测变量和响应变量之间的关系,这三个模型之一完全有可能在不同场景中优于其他模型。
R 和 Python 中的套索回归
以下教程解释了如何在 R 和 Python 中执行套索回归: