手把手教你使用R语言做LASSO 回归

手把手教你使用R语言做LASSO 回归LASSO回归也叫套索回归,是通过生成一个惩罚函数是回归模型中的变量系数进行压缩,达到防止过度拟合,解决严重共线性的问题,LASSO回归最先由英国人RobertTibshirani提出,目前在预测模型中应用非常广泛。在新格兰文献中,有大牛提出,对于变量过多而且变量数较少的模型拟合,首先要考虑使用LASSO惩罚函数。今天我们来讲讲怎么使用R语言通过LASSO回归构造预测模型。首先我们要下载R的glmnet包,由LASSO回归的发明人,斯坦福统计学家TrevorHastie领衔开发。加载

大家好,又见面了,我是你们的朋友全栈君。

LASSO 回归也叫套索回归,是通过生成一个惩罚函数是回归模型中的变量系数进行压缩,达到防止过度拟合,解决严重共线性的问题,LASSO 回归最先由英国人Robert Tibshirani提出,目前在预测模型中应用非常广泛。在新格兰文献中,有大牛提出,对于变量过多而且变量数较少的模型拟合,首先要考虑使用LASSO 惩罚函数。今天我们来讲讲怎么使用R语言通过LASSO 回归构造预测模型。
首先我们要下载R的glmnet包,由 LASSO 回归的发明人,斯坦福统计学家 Trevor Hastie 领衔开发。
加载需要的包,导入数据(还是我们既往的SPSS乳腺癌数据),删除缺失值

library(glmnet)
library(foreign)
bc <- read.spss("E:/r/Breast cancer survival agec.sav",
                use.value.labels=F, to.data.frame=T)
bc <- na.omit(bc)

在这里插入图片描述
目前,glmnet包只能接受矩阵形式的数据,数据框的数据会报错,所以我们先要把数据转换成矩阵形式,这一步很重要。

y<-as.matrix(bc[,8])
x<-as.matrix(bc[,c(2:7,9:11)])

在这里插入图片描述
通过转换后,我们得到了两个数据矩阵,Y是结果,X是数据的变量
开始构建模型

f1 = glmnet(x, y, family="binomial", nlambda=100, alpha=1) #这里alpha=1为LASSO回归,如果等于0就是岭回归
#参数 family 规定了回归模型的类型:
family="gaussian" 适用于一维连续因变量(univariate)
family="mgaussian" 适用于多维连续因变量(multivariate)
family="poisson" 适用于非负次数因变量(count)
family="binomial" 适用于二元离散因变量(binary)
family="multinomial" 适用于多元离散因变量(category)
我们这里结局指标是2分类变量,所以使用binomial
print(f1)#把f1结果输出

在这里插入图片描述
在这里插入图片描述
可以看到随着lambdas增加,自由度和残差减少,最小lambda为0.000233
输出图形

plot(f1, xvar="lambda", label=TRUE)

在这里插入图片描述
横坐标为随着lambdas的对数,纵坐标为变量系数,可以看到随着lambdas增加变量系数不断减少,部分变量系数变为0(等于没有这个变量了)

下面进行交叉验证
我们可以把数据集取一部分进行验证(这步不做也可以)

predict(f1, newx=x[2:5,], type = "response")

在这里插入图片描述
然后通过glmnet自带函数进行交叉检验,并输出图形

cvfit=cv.glmnet(x,y)
plot(cvfit)

在这里插入图片描述
我们这个图中有两条虚线,一个是均方误差最小时的λ值,一个是距离均方误差最小时一个标准误的λ值,有点拗口没关系,我们只要知道它是多少就可以了

cvfit$lambda.min#求出最小值
cvfit$lambda.1se#求出最小值一个标准误的λ值

在这里插入图片描述
在这里插入图片描述
OK,我们得出这两个值后分别带进模型看一看

l.coef2<-coef(cvfit$glmnet.fit,s=0.004174369,exact = F)
l.coef1<-coef(cvfit$glmnet.fit,s=0.04272596,exact = F)
l.coef1
l.coef2

在这里插入图片描述
在这里插入图片描述
我们看到第一个模型变量都没有了,第二个模型还有5个变量,因此就只能选第2个了。
我们把这几个系数拿出来组成广义线性方程,时间变量time懒得拿了(做示范而已,拿也是可以的)

mod<-glm(status~age+pathsize+lnpos+pr,family="binomial",data = bc)
summary(mod)

在这里插入图片描述
有3个指标入选,我们还可以求出OR和95%CI
在这里插入图片描述
OK,做到这里,模型已经全部做出来啦,您学会了吗?
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133212.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 前端开发电脑配置(做前端用什么笔记本电脑)

    我们在刚入职的时候,公司会让我们自己来配置电脑。下面是一些实用性的软件。1.VisualStudioCode这是我们前端开发人员相对来说最多使用的代码编辑器了,可以下载各种插件来辅助我们编写代码。下载链接:https://code.visualstudio.com/.2.Chrome浏览器谷歌浏览器,是目前最全面的浏览器,对我们写的代码非常友好,包括也支持各种各样的插件。下载链接:https://www.google.cn/chrome/.注:我这个是安装了csdn出品的插件

  • java 反编译器_Java反编译工具

    java 反编译器_Java反编译工具xjad反编译工具下载使用反编译时把class文件直接拖拽至工具内即可,如果反编译结果不对时把class文件重新去拿原始的不要编辑打开,或者放在一个文件夹内在试。反编译后的代码没有注释、注解等,反正能用得细心看看调整。点击下载工具http://a.xzfile.com/down2/XJadfanbinayi_downcc.zip…

  • 对该信源编二进制香农码_编译原理实验一

    对该信源编二进制香农码_编译原理实验一一、实验目的和任务1.理解信源编码的意义;2.熟悉MATLAB程序设计;3.掌握香农编码的方法及计算机实现;4.对给定信源进行香农编码,并计算编码效率;二、实验原理介绍给定某个信源符号的概率分布,通过以下的步骤进行香农编码:1.信源符号按概率从大到小排列;12…….nppp≥≥≥2.确定满足下列不等式的整数码长iK为()()1iiilbpKl…

  • PyCharm汉化之后,点击设置没反应,完美解决方法[通俗易懂]

    PyCharm汉化之后,点击设置没反应,完美解决方法[通俗易懂]请先检查下pycharm的安装目录lib下是不是有中文汉化包resources_cn.jar有过有的话建议:1.更换一个汉化包或者将原来的resources_en.jar也放进lib目录下2.将中文汉化包resources_cn.jar删除,只留下原版的resources_en.jar…

  • JetBrains PyCharm 2018.3.1 x64 激活码_通用破解码

    JetBrains PyCharm 2018.3.1 x64 激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • jdbc fetchsize_jdbc和odbc的关系

    jdbc fetchsize_jdbc和odbc的关系DBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号