Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择。Lars算法则提供了一种快速求解该模型的方法。Lars算法的基本原理有许多其他文章可以参考,这里不过多赘述, 这里主要简介如何在R中利用lars算法包求解线性回归问题以及参数的选择方法。

以下的的一些用法参照lars包的帮助文件,再加上自己的使用心得。所用的示例数据diabetes是Efron在其论文中“Least Angle Regression”中用到的,可以在加载lars包后直接获得

  1. library(lars)
  2. data(diabetes)
  3. attach(diabetes)

该数据中含有三个变量x,x2,y, 其中x是一个有422X10维的矩阵,y是一422维个向量 ,x2是由x得到的 422X64维矩阵(compressive).

1. 求解路径solution path

lars(x, y, type = c("lasso", "lar", "forward.stagewise", "stepwise"), trace = FALSE, normalize = TRUE, intercept = TRUE, Gram, eps = .Machine$double.eps, max.steps, use.Gram = TRUE)

该函数提供了通过回归变量x和因变量y求解其回归解路径的功能。其中,

type ---- 表示所使用的回归方法,包括(lasso, lar, forward.stagewise, stepwise),选择不同的回归方法将得到不同的解路径;

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

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

下面使用四种不同的回归方法对其进行回归分析

  1. object1 <- lars(x,y,type="lasso")
  2. object2 <- lars(x,y,type="lar")
  3. object3 <- lars(x,y,type="forward.stagewise")
  4. object4 <- lars(x,y,type="stepwise")

返回参数是一个list,其中包含了每次迭代得到的回归系数beta以及lambda等16个返回值。

可以分别对返回参数用plot( )画出其solution path的图像.

可以看到lars算法,算法的步数较少即迭代次数较少,且与参数个数相同,当数据维数非常高的时候lars算法相较于其他回归算法速度非常快。

2. 利用交叉验证(Cross Validtion)确认参数

在上一步我们可以看到lars一次给了其solution path上的所有解,我们需要确定其中哪个解是我们真正要用到的. 在lasso模型中,约束项由参数lambda进行控制,当给定了lambda,模型才能够确定下来。一个好的回归模型,需要给定一个合适的lambda,但是lamda的范围往往比较大。注意到www.255055.cn/ lars算法给出的解路径上的解个数是有限的,不同的解即不同的beta就对应了不同的lambda, 从solution path的图可以看到, 我们可以通过选定算法的step步数或者选定beta饱和度|beta|/max|beta|(此处| |表示一范数,饱和度同样也表征了解的稀疏度)来选定模型的参数.

此时就需要用到lars包中的cv.lars函数,

cv.lars(x, y, K = 10, index, trace = FALSE, plot.it = TRUE, se = TRUE,type = c("lasso", "lar", "forward.stagewise", "stepwise"), mode=c("fraction", "step"), ...)

K ----- 表示在进行交叉验证时,将数据随机分为K份,每次使用其中K-1份作为训练数据,用剩下的一份进行验证,最后计算这K次验证的均方误差;

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

其他的type等参数与lars()中的意义相同,下面我们以type="lar"时为例,以x2为自变量,演示确定回归参数的方法.

首先为方便描述,我们先单独画出使用该方法得到的solution path

然后利用lars.cv来确定其参数,首先使用的index为mode="www.huayi1.cn/ step"

  1. data(diabetes)
  2. attach(diabetes)
  3. cvsol1<-cv.lars(x2,y,type="lar",mode="step")
  4. detach(diabetes)

得到交叉验证的均方误差MSE分析结果图如下,

我可以看到由交叉验证得到的最优回归系数(使得均方误差MSE最小)是稀疏的,然后用以下语句得出最优解对应地的step步数为15,

 > cvsol1$index[which.min(www.yibaoyule1.com/ cvsol1$cv)]
[1] 15

相应地,第15步对应的的回归系数以及其饱和度|bata|/max|beta|为

得到的回归系数beta的稀疏度为14与真实稀疏度相近, 此处计算其饱和度是为了接下来与用饱和度为 index确定回归系数做对比。

接下来我们用饱和度作为inedx来确定最优, 此处我们已知最优的饱和度大致在0和0.1之间,为便于对比,这里设置饱和度的区间为0:100:0.1

  1. data(diabetes)
  2. attach(diabetes)
  3. cvsol2<-cv.lars(x2,y,type="lar",mode="fraction",
  4. index=seq(from=0,to=0.1,length=100) )
  5. detach(diabetes)

得到的均方误差MSE分析图为

然后同样是提取其中使得均方误差最小的饱和度,得到的结果为0.03232323

最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )的更多相关文章

  1. 从最小角回归(LARS)中学到的一个小知识(很短)

    [转载请注明出处]http://www.cnblogs.com/mashiqi (居然有朋友说内容不接地气,那么我就再加一段嘛,请喜欢读笑话的同学直接看第二段)假设这里有一组向量$\left\{ x_ ...

  2. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

  3. 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...

  4. A-06 最小角回归法

    目录 最小角回归法 一.举例 二.最小角回归法优缺点 2.1 优点 2.2 缺点 三.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等 ...

  5. LARS 最小角回归算法简介

    最近开始看Elements of Statistical Learning, 今天的内容是线性模型(第三章..这本书东西非常多,不知道何年何月才能读完了),主要是在看变量选择.感觉变量选择这一块领域非 ...

  6. R+tmcn笔记︱tmcn包的基本内容以及李舰老师R语言大会展示内容摘录

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- tmcn包目前托管在在R-forge 上开发和 ...

  7. R语言中常用包(二)

    数据导入 以下R包主要用于数据导入和保存数据 feather:一种快速,轻量级的文件格式.在R和python上都可使用readr:实现表格数据的快速导入.中文介绍可参考这里readxl:读取Micro ...

  8. r语言 包说明

    [在实际工作中,每个数据科学项目各不相同,但基本都遵循一定的通用流程.具体如下]   [下面列出每个步骤最有用的一些R包] 1.数据导入以下R包主要用于数据导入和保存数据:feather:一种快速,轻 ...

  9. R语言扩展包dplyr——数据清洗和整理

    R语言扩展包dplyr——数据清洗和整理 标签: 数据R语言数据清洗数据整理 2015-01-22 18:04 7357人阅读 评论(0) 收藏 举报  分类: R Programming(11)  ...

随机推荐

  1. maven私有库搭建

    一.在企业中基本上都会有自己的maven私有库,主要的目的就是方便依赖包的下载.如果采用远程的方式来实现的话,很多时候会考虑网速问题.如果自己活着公司搭建的私有库,这一样在使用上面会效率更高. 二.私 ...

  2. java 类装饰

    package TestIo; public class Test8 { public static void main(String[] args) { System.out.println(&qu ...

  3. Qt-QML-给我的导航条写一个动画-State-Transition

    上篇中,我已经写出一个导航条的,虽然太丑了,不过功能是有了,这次我将要给我的导航条加一个动画,先看下演示效果 这次我是用的是一个状态动画,大致原理就是写出一个空间的几个状态,完了再加一个过度动画,这里 ...

  4. 180608-Git工具之Stash

    git stash 暂存 背景: 实际开发过程中,经常可能遇到的一个问题,当你在dev分支上正开发得happy的时候:突然来了个线上bug,得赶紧从release分支上切一个bugfix分支来解决线上 ...

  5. 【SpringCloud】第三篇: 服务消费者(Feign)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  6. Oracle启动与关闭数据库实例

    Oracle数据库启动实例分为3个步骤: 启动实例 加载数据库 打开数据库 通用模式: STARTUP  [ nomount | mount | open | force ]  [resetrict] ...

  7. Django学习总结-之-URLS反向解析

    2018-09-15  09:58:49 在CSDN博客审核效率提高之前, 又要在此处向各位唠叨了~ URL 与 URI URL : 统一资源定位符 相当于绝对路径 URI : 统一资源标志符 相当于 ...

  8. 凸包算法(Graham扫描法)详解

    先说下基础知识,不然不好理解后面的东西 两向量的X乘p1(x1,y1),p2(x2,y2) p1Xp2如果小于零则说明  p1在p2的逆时针方向 如果大于零则说明 p1在p2的顺时针方向 struct ...

  9. 【第六章】MySQL日志文件管理

    1.日志文件管理概述: 配置文件:/etc/my.cnf 作用:MySQL日志文件是用来记录MySQL数据库客户端连接情况.SQL语句的执行情况以及错误信息告示. 分类:MySQL日志文件分为4种:错 ...

  10. 统计学习三:2.K近邻法代码实现(以最近邻法为例)

    通过上文可知k近邻算法的基本原理,以及算法的具体流程,kd树的生成和搜索算法原理.本文实现了kd树的生成和搜索算法,通过对算法的具体实现,我们可以对算法原理有进一步的了解.具体代码可以在我的githu ...