转载自:http://site.douban.com/182577/widget/notes/10567181/note/285262818/

#给一位朋友做的例子。

Lasso,套索。一种变量选择方法,使用罚约束来筛掉拟合模型中的系数。 可参考统计学习巨著ESL第2版(ESL这本书的主线可以说就是线性模型加罚约束)。

这个例子来自吴喜之老师《复杂数据统计方法》p29。第一种方案采用lars包(吴老师书里的方法,细节略有修正)。这个包的方法包括:Least Angle Regression, Lasso 和 Forward Stagewise,作者是两位大牛:Trevor Hastie和 Brad Efron。

library(lars)

data(diabetes)
attach(diabetes)

w <- cbind(diabetes$x, diabetes$y, diabetes$x2)

x <- as.matrix(w[, 1:10])
y <- as.matrix(w[, 11])#响应变量
x2 <- as.matrix(w[, 12:75])
laa <- lars(x2, y) #lars函数默认方法为lasso
plot(laa)

 
 

summary(laa) #共104步
cva <- cv.lars(x2, y, K = 10, plot.it = TRUE) #10折交叉验证,并绘制cv的变化图

 
 

best <- cva$index[which.min(cva$cv)]
coef <- coef.lars(laa, mode = "fraction", s = best) #使得CV最小时的系数
coef[coef != 0] #通过CV选择的变量
## sex bmi map hdl ltg glu bmi^2 glu^2 
## -92.967 502.356 241.632 -174.935 465.399 10.829 33.919 62.356 
## age:sex age:map age:ltg age:glu bmi:map 
## 97.308 28.427 4.497 13.780 79.712

laa$Cp[which.min(laa$Cp)] #最小的Cp值及其步数
## 15 
## 18.2

coef1 <- coef.lars(laa, mode = "step", s = 15) #使得Cp最小时的系数(s=15)
coef1[coef1 != 0] #通过CV选择的变量
## sex bmi map hdl ltg glu age^2 bmi^2 
## -112.313 501.617 251.792 -187.828 467.779 18.130 7.609 38.748 
## glu^2 age:sex age:map age:ltg age:glu bmi:map 
## 69.810 107.728 30.045 8.613 11.600 85.688

第2种方案采用glmnet包。这个包的方法是Lasso and elastic-net regularized generalized linear models。这个包的作者是erome Friedman, Trevor Hastie, Rob Tibshiran。对,就是ESL的三位作者。

library(glmnet)

gla <- cv.glmnet(x2, y, nfolds = 10) #cv做交叉验证来确定模型,nfolds=10其实是默认值
plot(gla) #绘制cv变化图

 
左边线对应最佳lamda,右侧线对应一个SE内最佳模型

gla$lambda.1se #最佳lambda值
## [1] 6.401
gla.best <- gla$glmnet.fit #对应的最佳模型
gla.coef <- coef(gla$glmnet.fit, s = gla$lambda.1se) #系数
gla.coef[which(gla.coef != 0)] #选择的变量
## [1] 152.133 500.895 184.880 -108.360 443.883 6.644 25.214
## [8] 38.632 5.620 1.060 46.970

最终输出的模型系数,对应图三中有两条线,右侧线,就是最佳的lambda值一个标准误之内的最简洁(系数最少)的模型。

关于Lasso回归的一个例子相关推荐

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

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

  2. 机器学习 Lasso回归算法

    Lasso回归算法: 坐标轴下降法与最小角回归法小结 前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge ...

  3. 回归问题-Lasso回归

    Lasso(Least absolute shrinkage and selection operator)方法是以缩小变量集(降阶)为思想的压缩估计方法.它通过构造一个惩罚函数,可以将变量的系数进行 ...

  4. 线性回归、lasso回归、岭回归以及弹性网络的系统解释

    线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...

  5. python回归模型 变量筛选_如何进行高维变量筛选和特征选择(一)?Lasso回归

    01模型简介 随着海量电子病历的挖掘,影像学.基因组学等数据进入医学统计分析,经常会面临对高维变量特征选择的问题,Lasso回归是在线性回归模型的代价函数后面加上L1范数的约束项的模型,它通过控制参数 ...

  6. 从LASSO回归到结构性稀疏:线性回归的正则项都带来了什么?

    ©作者 | 黄秋实 单位 | 香港中文大学(深圳) 研究方向 | 智能电网 本文我们主要关注于以下问题:  1. LASSO Regression 是什么? 2. 稀疏性的意义是什么?(从数学上证明) ...

  7. sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例

    文章目录 线性回归 引入 重要参数 重要属性 重要方法 例子 岭回归 引入 重要参数 重要属性 重要方法 示例 Lasso 回归 引入 重要参数 重要属性 重要方法 示例 本文主要讲一些sklearn ...

  8. [机器学习-原理篇]学习之线性回归、岭回归、Lasso回归

    线性回归.岭回归.Lasso回归 前言 一,线性回归--最小二乘 二,Lasso回归 三,岭回归 四, Lasso回归和岭回归的同和异 五, 为什么 lasso 更容易使部分权重变为 0 而 ridg ...

  9. 基于Python的岭回归与LASSO回归模型介绍及实践

    基于Python的岭回归与LASSO回归模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 岭 ...

最新文章

  1. pandas里面已经是sort_values()啦
  2. 五大地形等高线特征_高考复习地形特征描述专题
  3. linux学习教程(一)(安装篇)centos7没有安装ifconfig命令的解决方法
  4. 前端学习(3104):react-hello-react案例
  5. VS2017——50G超豪华IDE套餐酸爽体验!
  6. 《Hierarchical Attention Network for Document Classification》—— 用于文本分类的层次注意力网络
  7. 学习笔记2—MATLAB的copyfile技巧
  8. Python Flask Web 第三课 —— 模板
  9. Istio Proxy【Envoy扩展】详解
  10. html文件怎么转换为swf文件,在html里怎么添加flash视频格式(flv、swf)文件
  11. 利用阿里云虚拟机作为跳板机实现内网穿透
  12. 十人拼团一人得产品幸运【拼够够】我们来看具体的模式吧
  13. 游戏BI数据统计分析相关
  14. 一个TCP长连接设备管理后台工程(四)---jtt808协议解析
  15. vue3项目源码汇集
  16. 1.1 OpenFlow 概述
  17. Orangepi 5 Unixbench基准测试结果
  18. chrome硬件加速_如何在Chrome中打开和关闭硬件加速
  19. java课程设计atm机_java课程设计报告-自动取款机模拟程序.doc
  20. JAVA中的糕富帅技术——反射(一)

热门文章

  1. OpenGL之显卡(二十六)
  2. FFmpeg的模块介绍(一)
  3. Android7.0以上增加(/system/lib/libtest.so)系统库文件
  4. Ubuntu下emacs使用搜狗输入法
  5. Mac升级emacs26
  6. Android/Java面试题,边面试边成长,为了应试而应试
  7. vue-meta-info动态设置meta标签
  8. xml标签里有rownum_rownum和order by以及index的关系
  9. linux学习笔记:vim编辑器的各种用法操作命令
  10. Python求梅森尼数