今天给大家分享的主题依旧是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)datastr(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_datadata
标准化之后的数据如下:
在完成以上数据处理之后,我们就开始使用交叉验证来对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.minabline(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回归进行特征选择的全部内容,代码文件和博文会同步更新到“明天科技屋”公众号,大家在公众号里面回复关键词领取,希望大家多多关注,点点赞!