Lasso回归——基于R语言实现

今天给大家分享的主题依旧是Lasso回归,昨天的实战是基于python编程语言,今天的回归实战基于R语言进行,数据集依旧是采用Kaggle的数据集,如果说大家对Lasso回归相关的理论知识比较感兴趣的话,可以阅读Lasso回归——基于Kaggle数据集实战操作这篇文章,实战使用到的数据集,大家可以关注公众号“明天科技屋”回复关键词获得。

R语言在数据分析和机器学习方面目前也使用得比较多,很多前沿论文以及实战也是采用R语言进行,因此,对于R语言的学习也有一定的必要,今天给大家展示R语言是如何实现Lasso回归以及分析一下python和R语言在回归时的差别和注意点,并且相关代码也会同步上传到公众号,大家前往公众号获得。

首先,我们先导入R语言所需要的包文件,使用到的核心包为"glmnet"包,如果大家没有安装,可以先安装该包文件,安装命令也会在代码中附上,安装完之后添加包依赖,如果已经安装,直接添加包依赖即可。

# 安装包文件
install.packages('glmnet')
# 加载包依赖
library(glmnet)

接下来,我们将会进行数据导入和处理,该数据还是使用的上一篇Lasso回归的数据,数据读取的代码如下

setwd('C:\\Rdata')
data <- read.csv('heart.csv',header = TRUE)
data
str(data)

数据的详细信息和数据结构都查看了一下,如图所示

大家可以从图书数据看出,数据中包含数值型变量和分类变量,分类变量已经被处理成数值型数据,因此我们不用再进行独热编码处理,只需要对数值型数据标准化处理即可,标准化处理代码如下:

data_cate <- data[,c('age','trtbps','chol','thalachh','oldpeak')]
normalize_data <- as.data.frame(scale(data_cate))
data[,c('age','trtbps','chol','thalachh','oldpeak')] <- normalize_data
data

标准化之后的数据如下:

在完成以上数据处理之后,我们就开始使用交叉验证来对Lasso回归模型进行训练调优,使用R语言画出Lasso回归的路径图,并在图中使用红色虚线表示最优参数位置,在这个过程中,需要注意的是,传入的特征参数必须是一个matrix数据格式,而不是一个数据框,因此在传入数据之前需要对数据进行转换,这一点和python中实现有一些差距,在模型中有一个参数alpha,该参数是用来对回归的类型进行判别的,alpha=1代表Lasso回归,alpha=0代表岭回归,0-1之间代表弹性网络,具体实现代码如下:

train_matrix = as.matrix(data[,1:ncol(data)-1])
cvfit <- cv.glmnet(x=train_matrix ,y=data[,ncol(data)],alpha=1)
png('Lasso.png',width=800,height=600)
plot(cvfit,xvar='lambda',label=TRUE)
best_lambda <- cvfit$lambda.min
abline(v=log(best_lambda),col='red',lty=2)
dev.off()

实现效果如图所示

接下来,在正常情况下,特征变量的系数变化图我们也是需要的,所以,我们也用代码实现了特征变量系数变化折线图的绘制,在R语言中,绘制特征变量系数变化图,使用的训练模型是原始的Lasso回归模型,也就是模型中没有设置最优的惩罚系数绘制出来的折现图,在python中如果想要绘制折线图,必须使用交叉验证出来的最优参数训练的模型绘制,而R中不能使用最优参数模型来绘制变化图,否则会出错,大家可以看见模型中并没有设置最优惩罚系数,直接使用的正常模型进行训练绘制,具体代码如下:

lasso_model = glmnet(x=train_matrix,y=data[,ncol(data)],alpha=1)
png('Lasso_Cofficient.png',width=800,height=600)
plot(lasso_model, xvar="lambda")
dev.off()

绘制效果如图所示:

特征变量系数变化图出来之后,我们还需要看看最终选择的特征变量是哪些?在这种情况下,我们将使用交叉验证得出的最优参数训练的模型来得到特征变量信息,大家可以看见这次训练的模型中添加了最优的惩罚参数,具体代码如下:

lasso_model_best <- glmnet(x=train_matrix,y=data[,ncol(data)],alpha=1,lambda = best_lambda)
non_zero_coef <- predict(lasso_model_best,type='nonzero')
selected_features <- colnames(data[,1:ncol(data)-1])[non_zero_coef[,1]]
selected_features

得到的结果如下:

以上就是R语言实现Lasso回归进行特征选择的全部内容,代码文件和博文会同步更新到“明天科技屋”公众号,大家在公众号里面回复关键词领取,希望大家多多关注,点点赞!

### R语言Lasso回归示例代码 为了展示如何在R语言实现LASSO回归,下面提供了一个完整的代码实例。这段代码不仅实现LASSO回归模型,还展示了如何利用`cv.glmnet()`函数通过交叉验证选择最优的正则化参数,并最终输出所选的最佳λ值。 ```r library(glmnet) # 假设数据集已加载到变量x(自变量矩阵)和y(因变量向量)中 set.seed(123) n <- 100; p <- 20 x <- matrix(rnorm(n * p), n, p) y <- rnorm(n) # 执行带有交叉验证的LASSO回归分析 fit <- cv.glmnet(x, y, alpha = 1) # 输出最佳正则化参数λ_min及其对应的平均平方误差最小的一个标准误范围内最大的λ_1se cat("Selected lambda min:", fit$lambda.min, "\n") # 显示选定的λ最佳值[^4] cat("Selected lambda 1se:", fit$lambda.1se, "\n") # 使用最佳λ训练LASSO模型并获取系数 lasso_model <- glmnet(x, y, alpha = 1, lambda = fit$lambda.min) lasso_coef <- coef(lasso_model) print(lasso_coef) # 查看LASSO模型的系数[^1] # 计算测试集上的RMSE作为评估指标之一 predictions <- predict(fit, newx = x, s = "lambda.min") rmse <- sqrt(mean((predictions - y)^2)) cat("Root Mean Squared Error (RMSE):", rmse, "\n")[^2] ``` 此段代码首先导入必要的库glmnet,接着创建模拟的数据集用于演示目的;之后调用`cv.glmnet()`来进行带交叉验证的LASSO回归拟合过程,在这里设置`alpha=1`意味着仅应用L1惩罚项即LASSO回归[^3];最后部分则是基于得到的最佳λ重新构建LASSO模型,并计算其性能度量——均方根误差(RMSE)[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的邓先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值