前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言实现LASSO回归模型

R语言实现LASSO回归模型

作者头像
一粒沙
发布2019-07-31 14:22:56
11.9K0
发布2019-07-31 14:22:56
举报
文章被收录于专栏:R语言交流中心

我们知道广义线性模型包括了一维连续因变量、多维连续因变量、非负次数因变量、二元离散因变量、多元离散因变等的回归模型。然而LASSO对以上的数据类型都适合,也可以说LASSO 回归的特点是在拟合广义线性模型的同时进行变量筛选(variable selection)和复杂度调整(regularization)。变量筛选是指不把所有的变量都放入模型中进行拟合,而是有选择的把变量放入模型从而得到更好的性能参数。复杂度调整是指通过一系列参数控制模型的复杂度,从而避免过度拟合(Overfitting)。总的来说LASSO对数据的要求很低。对于线性模型来说,复杂度与模型的变量数有直接关系,变量数越多,模型复杂度就越高。 更多的变量在拟合时往往可以给出一个看似更好的模型,但是同时也面临过度拟合的危险。此时如果用全新的数据去验证模型(validation),通常效果很差。 一般来说,变量数大于数据点数量很多,或者某一个离散变量有太多独特值时,都有可能过度拟合。

今天我们给大家介绍下在R语言如何实现LASSO模型构建,其中有两个包是可以实现的(glmnet和lars)。因为glmnet涉及范围涉及广义线性模型,我们就主要介绍下lars是怎么实现LASSO的。包的安装我就不多讲了,install.pacakges(),你懂的。

首先我们看下其函数lars()。该函数提供了通过回归变量x和因变量y求解其回归模型。

其中主要的参数:

1. type 模型的类型。Lar-最小角回归,forward.stagewise-无穷小逐步回归,stagewise-逐步回归。

2. normalize 表示是否对变量进行归一化,当为TRUE时,程序将对x和y进行L2正则化。

3. intercept表示是否对变量进行中心化,当为TRUE时,程序将对x和y分别减去其均值。

diabetes数据中含有三个变量x,x2,y,其中x是一个有422X10维的矩阵,y是一422维个向量 ,x2是由x得到的 422X64维矩阵。

示例程序:

library(lars)

data(diabetes)

attach(diabetes)

object1<-lars(x,y,type="lasso")

plot(object)

图中横坐标代表的beta值或者步数,竖坐标代表的变量的参数。

接下来就是模型的优化,用到的函数是cv.lars()。其主要的功能是确定最优解的步数,或者beta值。

其中主要的参数:

K 交叉验证的次数,默认10倍交叉验证。

type同lars指的模型的类型。

mode 指用到的参数指标。step即按步数step去选择所需的参数,fraction即按照path中的横坐标|beta|/max|beta|去选择所需变量,fraction默认为0:100:1即 index=seq(from=0,to=1,length=100)。

程序实例:

cv_sol<-cv.lars(x,y,type="lasso",mode="step")

均方误差MSE分析图为:

然后就是获取最优最优回归系数(使得均方误差MSE最小)。

fra=cv_sol$index[which.min(cv_sol$cv)]

接下来就是通过上面得到的fra,获取对应的参数值

object$beta[fra,]

最后就是模型的预测功能,我们用到的函数是predict。

其主要参数:

object表示我们通过lars计算得到的包含了解路径信息的返回参数;

type当type为"fit"时, 可以给定一个新预测样本自变量数据,则该函数返回通过lars回归模型得到的预测值;当type为"coefficient"时,则不需要输入新数据, 该函数返回模型的回归系数相当于cv.lars。

mode表示我们输入的模型的参数类型,同cv.lars函数。

S表示通过cv.lars确定的最优解步数或者beta值。

示例程序:

res=predict(object,newx=x[1:5,],s=fra,type="fit", mode="step")

如上图得到我们想要的预测结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档