这里向您展示如何在R中使用glmnet包进行岭回归(使用L2正则化的线性回归),并使用模拟来演示其相对于普通最小二乘回归的优势。
岭回归
当回归模型的参数被学习时,岭回归使用L2正则化来加权/惩罚残差。在线性回归的背景下,它可以与普通最小二乘法(OLS)进行比较。OLS定义了计算参数估计值(截距和斜率)的函数。它涉及最小化平方残差的总和。L2正则化是OLS函数的一个小增加,以特定的方式对残差进行加权以使参数更加稳定。结果通常是一种适合训练数据的模型,不如OLS更好,但由于它对数据中的极端变异(例如异常值)较不敏感,所以一般性更好。
包
我们将在这篇文章中使用以下软件包:
library(tidyverse)
library(broom)
library(glmnet)
与glmnet的岭回归
glmnet软件包提供了通过岭回归的功能glmnet()。重要的事情要知道:
它不需要接受公式和数据框架,而需要一个矢量输入和预测器矩阵。
您必须指定alpha = 0岭回归。
岭回归涉及调整超参数lambda。glmnet()会为你生成默认值。另外,通常的做法是用lambda参数来定义你自己(我们将这样做)。
以下是使用mtcars数据集的示例:
因为,与OLS回归不同lm(),岭回归涉及调整超参数,lambda,glmnet()为不同的lambda值多次运行模型。我们可以自动找到最适合的lambda值,cv.glmnet()如下所示:
cv_fit
cv.glmnet() 使用交叉验证来计算每个模型的概括性,我们可以将其视为: