R语言如何和何时使用glmnet岭回归

全文链接:http://tecdat.cn/?p=4103

原文出处:拓端数据部落公众号

本文向您展示如何在R中使用glmnet包进行岭回归(使用L2正则化的线性回归),并使用模拟来演示其相对于普通最小二乘回归的优势。

岭回归

当回归模型学习参数时,岭回归使用L2正则化来加权/惩罚残差。在线性回归的背景下,它可以与普通最小二乘法(OLS)进行比较。OLS定义了计算参数估计值(截距和斜率)的函数。它涉及最小化平方残差的总和。L2正则化是OLS函数的一个小增加,以特定的方式对残差进行加权以使参数更加稳定。结果通常是一种适合训练数据的模型,不如OLS更好,但由于它对数据中的极端变异(例如异常值)较不敏感,所以一般性更好。

软件包

我们将在这篇文章中使用以下软件包:

library(broom)
library(glmnet)

glmnet的岭回归

glmnet软件包提供了通过岭回归的函数glmnet()。

它不需要公式和数据框,而需要一个矢量输入和预测矩阵。

你必须指定alpha = 0岭回归。

岭回归涉及调整超参数lambda。glmnet()会为你生成默认值。另外,通常的做法是用lambda参数来定义。因为,与OLS回归不同,岭回归涉及调整超参数,lambda,glmnet()为不同的lambda值多次运行模型。

我们可以自动找到最适合的lambda值,cv.glmnet() 使用交叉验证来计算每个模型的误差,cv.glmnet()如下所示:

cv_fit <- cv.glmnet(x, y, alpha =0, lambda = lambdas)

以下是使用mtcars数据集的示例:

plot(cv_fit)

 

曲线中的最低点指示最佳的lambda:使交叉验证中的误差最小化的lambda的对数值。我们可以将这个值提取为:

opt_lambda <- cv_fit$lambda.minopt_lambda#
> [1] 3.162278

我们可以通过以下方式提取所有拟合的模型:

summary(fit)
#>           Length Class     Mode   
#> a0         51    -none-    numeric
#> beta      153    dgCMatrix S4     
#> df         51    -none-    numeric
#> dim         2    -none-    numeric
#> lambda     51    -none-    numeric
#> dev.ratio  51    -none-    numeric
#> nulldev     1    -none-    numeric
#> npasses     1    -none-    numeric
#> jerr        1    -none-    numeric
#> offset      1    -none-    logical
#> call        5    -none-    call   
#> nobs        1    -none-    numeric

预测值并计算我们训练的数据的R 2值:

​
# 平方和总误差
sst <- sum((y - mean(y))^2)
sse <- sum((y_predicted - y)^2)# R方
rsq <-1- sse / sstrsq
#> [1] 0.9318896

​

最优模型已经在训练数据中占93%的方差。

Ridge 和 OLS模拟

通过产生比OLS更稳定的参数,岭回归不容易过度拟合训练数据。因此,岭回归可能预测训练数据不如OLS好,但更好地推广到新数据。当训练数据变化极端大时尤其如此,当样本大小较低和/或特征的数量相对于观察次数较多时会发生。

下面是我创建的一个模拟实验,用于比较岭回归和OLS在训练和测试数据上的预测准确性。

我首先运行模拟:

针对不同数量的训练数据和特征的比例运行模拟:

​
d <- cross_d(list(n_train = seq(20,200,20),p_features = seq(.55,.95,.05
d <- d %>%mutate(results = map2(n_train, p_features, 

​

可视化结果

对于不同数量的训练数据(对多个特征进行平均),两种模型对训练和测试数据的预测效果如何?

根据假设,OLS更适合训练数据,但Ridge回归更好地预测新的测试数据。此外,当训练观察次数较少时,这些影响更为明显。

对于不同的相对特征比例(平均数量的训练数据),两种模型对训练和测试数据的预测效果如何?

OLS在训练数据上表现稍好,但Ridge在测试数据上更好。当特征的数量相对于训练观察的数量相对较高时,效果更显着。

下面的图有助于将Ridge对OLS的相对优势(或劣势)可视化为观察值和特征的数量:

这显示了综合效应:当训练观察数量较低和/或特征数目相对于训练观察数目较高时,Ridge回归更好地预测测试数据。OLS在类似条件下的训练数据上表现略好,表明它比使用Ridge正则化时更容易过拟合数据。


最受欢迎的见解

1.R语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型分析案例

5.R语言回归中的Hosmer-Lemeshow拟合优度检验

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.在R语言中实现Logistic逻辑回归

8.python用线性回归预测股票价格

9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值