数据分析师应该知道的16种回归技术:弹性网络回归

2018 年 8 月 16 日 数萃大数据

通过前面的学习我们知道,岭回归通过添加回归系数的L2范数对回归系数进行收缩,从而增加估计值的稳定性;LASSO回归则通过添加回归系数的L1范数回归系数进行收缩。不同于岭回归的是,只要惩罚系数足够大,LASSO回归就可把所有系数收缩到0。因此,LASSO回归可以用来进行变量选择,对数据的解释性也更强。然而,LASSO也存在如下不足:

  •  当时,至多可选择个特征变量。

  • 若变量中存在高度相关的变量组,LASSO回归仅选择一个而忽视其他变量,就这一点而言,岭回归要优于LASSO回归。


弹性网络回归可以克服这些不足,它在LASSO回归的惩罚项中加入回归系数的L2范数,使得损失函数严格凸,保证目标函数有唯一最优解。因此,弹性网络回归的目标函数为:

因为,因此总存在使得:

若设,则弹性网络回归变为岭回归(LASSO回归)。


类似于岭回归和LASSO回归,可以用交叉验证的方法来寻找的最优值。但是在弹性网络回归中,的估计值还依赖于的值,可使用网格搜索来找到最优的


案例

我们使用的是MASS包中的Boston数据集,该数据集记录506个波士顿不同区域的14项社会指标,详细内容见下图所示。我们想通过这组数据探究不同区域的房价中值(mdv)同其他指标之间的关系。

用网格搜索法找到最优alpha,最优alpha值为0.4。

  
  
    
  1. # 加载数据集合

  2. data("Boston", package = "MASS")

  3. set.seed(5)

  4. id <- sample(1:nrow(Boston),nrow(Boston)*2/3)

  5. #训练集

  6. x1 <- Boston[id,-14];y1 <- Boston[id,14]

  7. #测试集

  8. x2 <- Boston[-id,-14];y2 <- Boston[-id,14]

  9. library(glmnet)

  10. fun <- function(alp){

  11.  model <- cv.glmnet(as.matrix(x1),y1,alpha = alp)

  12.  fit <-  predict(model,s = model$lambda.min,newx=as.matrix(x2))

  13.  return(mean((fit-y2)^2))

  14. }

  15. mse=sapply(0:10*.1, fun)

  16. cols=c(2,rep(3,8),4)

  17. plot(1,type = 'n',xlab = 'alpha',ylab = 'MSE',

  18.     xlim = c(0,1),ylim = c(min(mse),max(mse)))

  19. points(1:9*.1,mse[2:10],cex=1.5,pch=16)

  20. points(0,mse[1],cex=1.5,pch=16,col='red')

  21. points(1,mse[11],cex=1.5,pch=16,col='blue')

  22. legend('topright',c('Ridge(0)','LASSO(1)','ElasticNet({0.1-0.9})'),

  23.       pch=16,col = c('red','blue','black'),bty = 'n',pt.cex = 1.5)

在最优alpha值下用交叉验证法寻找最优lambda,最优lambda值为0.025。

  
  
    
  1. model <- cv.glmnet(as.matrix(x1),y1,alpha = 0.4,keep=T,

  2.                   lambda = 10^seq(5,-3,-0.1))

  3. model$lambda.min

 绘制回归系数在不同lambda下的变化曲线

  
  
    
  1. op=par(mfrow=c(1,2))

  2. plot(model)

  3. library(RColorBrewer)

  4. hatbeta <- as.matrix(model$glmnet.fit$beta)

  5. lambda = log(10^seq(5,-3,-0.1))

  6. plot(1,type = 'n',xlim = c(min(lambda),max(lambda)),

  7.     ylim = c(min(hatbeta),max(hatbeta)),

  8.         xlab = 'log(lambda)',ylab = 'coefficients')

  9. colrs = c(brewer.pal(8,"Dark2"),brewer.pal(5,"Accent"))

  10. for (i in 1:13) {

  11.      lines(lambda,hatbeta[i,],col=colrs[i],lwd=2)

  12. }

  13. abline(v=log(best_lambda),lty=3,lwd=3,col='gray30')

  14. legend('bottomright',rownames(hatbeta),lty = 1,lwd=2,

  15.           col=colrs,bty = 'n',cex = 0.75)

  16. par(op)

推荐阅读

数据分析师应该知道的16种回归技术:Lasso回归

数据分析师应该知道的16种回归技术:岭回归

从零开始深度学习第8讲:利用Tensorflow搭建神经网络

谈谈大数据的那点事 (12)——如何理解大数据和分析大数据

爬取R语言会议视频


长按二维码关注“数萃大数据”

登录查看更多
91

相关内容

打怪升级!2020机器学习工程师技术路线图
专知会员服务
98+阅读 · 2020年6月3日
商业数据分析,39页ppt
专知会员服务
160+阅读 · 2020年6月2日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
一文读懂线性回归、岭回归和Lasso回归
CSDN
34+阅读 · 2019年10月13日
博客 | 回归类算法最全综述及逻辑回归重点讲解
AI研习社
13+阅读 · 2018年11月29日
数据分析师应该知道的16种回归方法:负二项回归
数萃大数据
74+阅读 · 2018年9月16日
LASSO回归与XGBoost:融合模型预测房价
论智
31+阅读 · 2018年8月8日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
面试整理:关于代价函数,正则化
数据挖掘入门与实战
8+阅读 · 2018年3月29日
BAT题库 | 机器学习面试1000题系列(第226~230题)
七月在线实验室
9+阅读 · 2017年11月27日
Deep Anomaly Detection with Outlier Exposure
Arxiv
17+阅读 · 2018年12月21日
Efficient and Effective $L_0$ Feature Selection
Arxiv
5+阅读 · 2018年8月7日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
3+阅读 · 2018年2月24日
Arxiv
5+阅读 · 2018年1月17日
Arxiv
3+阅读 · 2018年1月10日
VIP会员
相关资讯
一文读懂线性回归、岭回归和Lasso回归
CSDN
34+阅读 · 2019年10月13日
博客 | 回归类算法最全综述及逻辑回归重点讲解
AI研习社
13+阅读 · 2018年11月29日
数据分析师应该知道的16种回归方法:负二项回归
数萃大数据
74+阅读 · 2018年9月16日
LASSO回归与XGBoost:融合模型预测房价
论智
31+阅读 · 2018年8月8日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
面试整理:关于代价函数,正则化
数据挖掘入门与实战
8+阅读 · 2018年3月29日
BAT题库 | 机器学习面试1000题系列(第226~230题)
七月在线实验室
9+阅读 · 2017年11月27日
Top
微信扫码咨询专知VIP会员