这一讲呢,给大家讲解一下lasso回归。目前这个方法还没有一个正规的中文名,如果从lasso这个单词讲的话,叫套索。那么套索是啥呢,就是套马脖子的东西,见下图:

就是拿这个东西把动物脖子套住,不要它随便跑。lasso 回归就是这个意思,就是让回归系数不要太大,以免造成过度拟合(overfitting)。所以呢,lasso regression是个啥呢,就是一个回归,并且回归系数不要太大。这个思想如果拿数学语言表达的话,就是下面的样子

minmizeβ0∈R,β∈Rp1n∑i=1n(yi−β0−xTiβ)2  subject  to  ∥β∥1≤t

\mathop{minmize}_{\beta_0\in R,\beta \in R^p} \frac{1}{n}\sum_{i=1}^{n}(y_i-\beta_0-x_i^T\beta)^2 ~~subject~~to~~\|\beta\|_1 \le t
其实就是在普通回归的损失函数的基础上增加了个 β\beta的约束。那么 β\beta的约束为什么要使用这种形式,比如,下面形式这种约束也能使得 β\beta不是太大。

∥β∥2≤t

\|\beta\|^2 \le t.
妙处就在这个地方,在第一范数的约束下,一部分回归系数刚好可以被约束为0.这样的话,就达到了特征选择的效果。至于为什么大家可以看看下图

图中的红色线圈表示,损失函数的等值线,我们可以看到,第一范数约束下, β1\beta_1可以被约束成0。而右边第二范式约束下, β1\beta_1可以被约束的接近0.但是没有达到0.
既然lasso回归可以看成是约束优化问题,因此可以进行求解了。实际上lasso回归的意义远不止这个,lasso回归可以适应的情况是:样本量比较小,但是指标非常多,即小N大P问题。适用于高维统计,传统的方法无法应对这样的数据。并且lasso可以进行特征选择。现在的话,lasso家族已经发展出好多模型了,这个模型是由1996年Robert Tibshirani提出的。他和斯坦福的Bradley Efron等几个人,厉害的不得了,见证了整个统计学在计算机学科的影响下发展。

基于R的lasso回归

为什么要拿R做lasso,因为斯坦福统计系的几位大师最早都是拿R开发了几个lasso包。我们最好还是用R,毕竟是大师写的包。为了对比,我们做三个回归,一个是传统的均值回归,一个是ridge regression,一个是lasso回归,我们看看效果如何。

rm(list=ls())
dat<-read.csv("D:/Rdata/lasso_dat.csv")
head(dat)Y         X1         X2         X3        X4         X5         X6
1 14.9607083  1.5953295  2.9141118  2.9490906 2.3531784  1.0412069  0.8151355
2 -0.3579434 -0.5584693 -1.1981533  1.2275879 0.3332272  0.5569235 -1.9695117
3  0.8765146 -0.6689517  0.9050208  1.1657989 1.3203673 -0.7263651  0.3727694
4  1.8098995  0.2648723 -1.0164312 -0.2752811 1.6298845  0.5185340  0.4962158
5  3.0404683 -0.4606268  0.3767176  0.9498028 1.2291411  1.6759266 -1.6201224
6 -4.4359221 -0.1008654 -0.9888361  0.4612514 1.1799055 -0.6183934 -1.7610674#下面做三个回归
# (1) 最小二乘回归
model.ols <- lm(Y~.-1, data=dat)
summary(model.ols)
Call:
lm(formula = Y ~ . - 1, data = dat)Residuals:Min      1Q  Median      3Q     Max
-4.3885 -1.1771  0.6464  1.9832  6.4057 Coefficients:Estimate Std. Error t value Pr(>|t|)
X1  3.61142    0.63931   5.649 8.13e-06 ***
X2  1.68079    0.64137   2.621   0.0150 *
X3 -0.33011    0.63780  -0.518   0.6095
X4  1.33792    0.76541   1.748   0.0933 .
X5  0.08907    0.81004   0.110   0.9134
X6 -0.34500    0.52378  -0.659   0.5164
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 2.914 on 24 degrees of freedom
Multiple R-squared:  0.8087,    Adjusted R-squared:  0.7608
F-statistic: 16.91 on 6 and 24 DF,  p-value: 1.485e-07
#提取回归系数
coef.ols <- coef(model.ols)
#查看不等于0的回归系数
coef.ols[coef.ols!=0]  X1          X2          X3          X4          X5          X6 3.61141743  1.68079404 -0.33010639  1.33792406  0.08907369 -0.34499781 # (2)  ridge regression(岭回归)
model.rid <- linearRidge(Y~.-1, data=dat)
#查看结果
summary(model.rid)
Call:
linearRidge(formula = Y ~ . - 1, data = dat)Coefficients:Estimate Scaled estimate Std. Error (scaled) t value (scaled) Pr(>|t|)
X1  3.34326        18.15297             3.02490            6.001 1.96e-09 ***
X2  1.55602         9.33877             3.24737            2.876  0.00403 **
X3 -0.16886        -1.14619             3.43476            0.334  0.73860
X4  1.18625         6.86298             3.47735            1.974  0.04842 *
X5  0.01244         0.05443             3.09414            0.018  0.98596
X6 -0.22464        -1.33800             2.84413            0.470  0.63804
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Ridge parameter: 0.07890282, chosen automatically, computed using 5 PCsDegrees of freedom: model 5.315 , variance 4.744 , residual 5.886
#提取系数
coef.rid <- coef(model.rid)
#查看不等于0的系数
coef.rid[coef.rid!=0]                           X1          X2          X3          X4          X5          X6 3.34325841  1.55601878 -0.16886083  1.18625138  0.01243652 -0.22464097
# (3) 做 lasso regression
#模型设定
model.lasso <- lars(X, Y, type='lasso')
#画个图
plot(model.lasso)             


下面继续

#查看模型详细信息
summary(model.lasso)
LARS/LASSO
Call: lars(x = X, y = Y, type = "lasso")Df    Rss      Cp
0  1 980.27 84.1817
1  2 595.57 42.1569
2  3 371.22 18.4827
3  4 208.56  1.8672
4  5 205.15  3.4768
5  6 201.10  5.0131
6  7 200.98  7.0000
set.seed(12345)
#做交叉验证
CV.lasso <- cv.lars(X, Y, K=10)   

产生如下效果图

(best <- CV.lasso$index[which.min(CV.lasso$cv)])0.6969697
#选择最好的效果
(coef.lasso <- coef.lars(model.lasso, mode='fraction', s=best))
#命名
names(coef.lasso) <- colnames(dat)[-1]
#查看结果
coef.lasso[coef.lasso!=0]                     X1       X2       X4
3.213401 1.231145 0.741892 

结论

通过上面的实验,我们可以看到,传统线性回归,岭回归都没有把一部分回归系数约束为0,只有lasso 回归做到了。实际上,这个只是一个很简单的例子,在实际当中,lasso处理的数据往往是DNA数据,变量非常多,我们目的是通过lasso把对某种疾病有明显影响的DNA片段找出来。那么在这种情况下,传统回归不要说选择了,就是运行都无法运行了。因为维度太大,这个矩阵XTXX^TX是不可逆了。如果用ridge regression也不行。lasso是我们最佳选择,在金融当中,lasso可以用来选择资产组合。

Lasso regression(稀疏学习,R)相关推荐

  1. 深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression)

    深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression) 本文主要通过使用mlr3包来训练German credit数据集,实现不同的深度学习模型. 1. ...

  2. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  3. Chapter 11 特征选择和稀疏学习

    Chapter 11 特征选择和稀疏学习 1 子集搜索与评价 一个样本通常有多个属性,如西瓜有色泽,根蒂,颜色等.将属性称之为特征,对一个学习任务而言,有用的特征称之为"相关特征" ...

  4. 《机器学习》阅读心得——十一、特征选择和稀疏学习

    十一.特征选择和稀疏学习 11.1 子集搜索和评价   对一个学习任务来说,给定属性集,其中有些属性可能很关键,另一些属性可能没什么用,我们将属性称为"特征",对当前学习任务有用的 ...

  5. 机器学习之数学基础(四)~Lasso Regression回归, L1、L2 Regularization正则化, 回归问题中的损失函数

    目录 1. Lasso回归 1.1 概念 1.2 正则化 1.3 Lasso回归模型 1.4 为什么Lasso Regression可以做降维? 1.5 参数求解 (1)坐标轴下降法 (2)最小角回归 ...

  6. 特征选择与稀疏学习。

    特征选择与稀疏学习 最近在看论文的过程中,发现对于数据集的行和列叫法多有不同,故在介绍本章之前,决定先将最常用的术语罗列一二,以后再见到了不管它脚扑朔还是眼迷离就能一眼识破真身了~对于数据集中的一个对 ...

  7. Lasso Regression

    Lasso Regression 标签(空格分隔): 监督学习 在数据挖掘和机器学习算法的模型建立之初,为了尽量的减少因缺少重要变量而出现的模型偏差问题,我们通常会尽可能的多的选择自变量.但是在实际建 ...

  8. 机器学习(周志华) 第十一章特征选择与稀疏学习

    关于周志华老师的<机器学习>这本书的学习笔记 记录学习过程 本博客记录Chapter11 文章目录 1 子集搜索与评价 2 过滤式选择 3 包裹式选择 4 嵌入式选择与L1正则化 5 稀疏 ...

  9. 【2022新书】深度学习R语言实战,第二版

    来源:专知 本文为书籍介绍,建议阅读5分钟使用R和强大的Keras库从头开始进行深度学习! R深度学习,第二版 使用R和强大的Keras库从头开始进行深度学习! 在R深度学习第二版中,您将学习: 从基 ...

最新文章

  1. 基础矩阵,本质矩阵,单应性矩阵讲解
  2. [2008.06.10 23:20:00] 心智成熟的旅程
  3. linux 发行版 suse opensuse 区别
  4. python爬取资料_Python爬取FLASH播放器中的资料
  5. Scala import导包用法
  6. 最新综述:用于组合优化的强化学习
  7. python的for循环语句怎么写_python中的for循环语句怎么写
  8. mysql hex函数性能_mysql hex与unhex 函数的妙用
  9. 电脑开机3秒就重启循环_U盘如何变成万能维修工具?分享3款PE制作软件,小白秒变电脑高手...
  10. IAT 注入ImportInject(dll)
  11. 伍德里奇计量经济学第三章课后计算机作业,伍德里奇---计量经济学第7章部分计算机习题详解(STATA)...
  12. 面试题系列(三)-socket
  13. 致那些徘徊在测试界的屌丝——也致给我自己这个苦逼屌丝
  14. 全国第三次土壤普查实验室筛选开始 实验室要求理化检测指标仪器一览
  15. 笔记——Tensorflow: The Confusing Parts (2)
  16. 2015(毕业)秋季校园招聘各种企业笔试面试心得
  17. 家乡菜之回锅茄子_wizard_新浪博客
  18. Android 获取摄像头像素,个数
  19. Oracle 错误总结及解决方法
  20. 2023系统分析师软考资料大礼包(e赛内部版)

热门文章

  1. 免费为网站配置ssl证书, 使网站变成https.半小时搞定
  2. python的matplotlib.pyplot绘制甘特图
  3. Java毕设项目桌游店会员管理系统(java+VUE+Mybatis+Maven+Mysql)
  4. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(一)
  5. Office文档在线预览
  6. China-pub迎新春 100万图书免费送
  7. 通过JS判断浏览器类型,详细区分IE各版本浏览器
  8. pertII型管和pertI型管的区别
  9. 小学生护眼台灯哪个品牌好?眼医生分享的护眼灯品牌
  10. sftp 路径、文件及文件夹的操作小记