用R进行Lasso regression回归分析

glmnet是一款由斯坦福大学统计学家开发的R包,用于在广义线性回归模型基础上添加正则项,解决过拟合问题。支持线性、逻辑、泊松及cox回归,提供岭回归、套索回归及弹性网络回归三种正则化方式,适用于多种数据分布。
摘要由CSDN通过智能技术生成

转载自品略图书馆  http://www.pinlue.com/article/2020/01/0912/049886542811.html

 

glmnet是由斯坦福大学的统计学家们开发的一款R包,用于在传统的广义线性回归模型的基础上添加正则项,以有效解决过拟合的问题,支持线性回归,逻辑回归,泊松回归,cox回归等多种回归模型

 

对于正则化,提供了以下3种正则化的方式

ridge regression,岭回归

lasso regression,套索回归

elastic-net regression,弹性网络回归

这3者的区别就在于正则化的不同,套索回归使用回归系数的绝对值之和作为正则项,即L1范式;岭回归采用的是回归系数的平方和,即L2范式;弹性网络回归同时采用了以上两种策略,其正则项示意如下

可以看到,加号左边对应的是lasso回归的正则项,加号右边对应的是ridge回归的正则项。在glmnet中,引入一个新的变量α, 来表示以上公式

可以看到,随着α取值的变化,正则项的公式也随之变化

alpha = 1,  lasso regression

alpha = 0,  ridge regression

alpha 位于0到1之间, elastic net regression

利用alpha的取值来确定回归分析的类型,然后就只需要关注lambda值就可以了。除此之外,还有一个关键的参数family, 用来表示回归模型的类型,其实就是因变量y的数据分布,有以下几种取值

gaussian, 说明因变量为连续型变量,服从高斯分布,即正态分布,对于的模型为线性回归模型

binomial, 说明因变量为二分类变量,服从二项分布,对应的模型为逻辑回归模型

poisson, 说明因变量为非负正整数,离散型变量,服从泊松分布,对应的模型为泊松回归模型

cox, 说明因变量为生存分析中的因变量,同时拥有时间和状态两种属性,对应的模型为cox回归模型

mbinomial, 说明因变量为多分类的离散型变量,对应的模型为逻辑回归模型

mgaussian, 说明因变量为服从高斯分布的连续型变量,但是有多个因变量,输入的因变量为一个矩阵,对应的模型为线性回归模型

理解这两个参数之后,就可以使用这个R包来进行分析了。以线性回归模型的的lasso分析为例,代码如下

上述代码以swiss这个数据集为例,构建了一个多元线性回归模型,而且抽取了50%的数据作为训练集,剩下的50%作为测试集,准备好数据集之后,就可以进行分析了

glmnet支持岭回归,套索回归,弹性网络回归3种正则化的回归分析,功能十分强大,更多细节请参考官方文档。

Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)是一种线性回归方法,它在损失函数中加入了L1正则化项。Lasso回归不仅可以用来预测变量之间的关系,而且可以通过收缩系数来简化模型,实现变量选择,即对回归系数进行压缩,使得一些不重要的预测变量的系数变为零,从而实现特征选择的功能。 在R语言中,可以使用`glmnet`包来进行Lasso回归分析。`glmnet`包提供了一种高效的方式来拟合广义线性模型的弹性网络,包括Lasso回归(L1正则化)和Ridge回归(L2正则化)。下面是使用`glmnet`包进行Lasso回归的一般步骤: 1. 安装并加载`glmnet`包。 2. 准备数据,通常是将预测变量和响应变量分开,并将数据转换为矩阵格式。 3. 使用`cv.glmnet`函数进行交叉验证,选择最佳的正则化参数`lambda`。 4. 训练最终的Lasso回归模型。 5. 对模型的系数和预测性能进行评估。 以下是一个简化的R语言Lasso回归示例: ```R # 安装并加载glmnet包 install.packages("glmnet") library(glmnet) # 准备数据 x <- model.matrix(Salary~., data=salary_df)[,-1] # 预测变量,-1是为了去掉截距项 y <- salary_df$Salary # 进行交叉验证以选择lambda set.seed(123) cv_fit <- cv.glmnet(x, y, alpha=1) # alpha=1表示Lasso回归 # 查看交叉验证结果 plot(cv_fit) # 提取最佳lambda值并训练最终模型 best_lambda <- cv_fit$lambda.min final_fit <- glmnet(x, y, alpha=1, lambda=best_lambda) # 查看模型系数 coef(final_fit) # 使用模型进行预测 predictions <- predict(final_fit, s=best_lambda, newx=newx) # newx为新的预测数据集 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值