变量的选择——Lasso&Ridge&ElasticNet
对模型参数进行限制或者规范化能将一些参数朝着0收缩(shrink)。使用收缩的方法的效果提升是相当好的,岭回归(ridge regression,后续以ridge代称),lasso和弹性网络(elastic net)是常用的变量选择的一般化版本。弹性网络实际上是结合了岭回归和lasso的特点。
Lasso和Ridge比较
- Lasso的目标函数:

- Ridge的目标函数:

- ridge的正则化因子使用二阶范数,虽然ridge可以将参数估计值向0收缩,但对于任何调优后的参数值,它都无法将某些参数值变为严格的0,尽管某些参数估计值变得非常小以至于可以忽略,但实际上它并没有进行变量选择。所以L1范数和L2范数正则化都有助于降低过拟合风险,但L1范数还带来一个额外的好处,它比L2范数更易于获得“稀疏(sparse)”解,即它所求的w会有更少的非零分量。
- 为何ridge到lasso,从L2范数变成L1范数,lasso就能够把参数估计收缩为0而ridge就不行呢?对于Lasso而言,优化下面两个方程是等价的:

也就是说,对每个超参λ,都存在相应的s值,使得上面两个方程优化后得到的参数估计相同。
类似的,对于Ridge,下面两个方程等价:

当参数维度p=2时,lasso的参数估计是在|β1|+|β2|<=s条件下,β1和β2最小化RSS的。ridge的参数估计是在β12+β22<=s的参数取值中最小化RSS的。当s很大时,限制条件几乎是无效的,lasso和ridge退化为最小二乘法,相反,如果s很小时,那么可能的参数取值范围就非常有限。

红线是平方误差项RSS的等值线,左侧青绿色的正方形是L1范数约束下的(β1,β2)的取值空间,右侧青绿色的圆形是L2范数约束下的(β1,β2)的取值空间。上面两个方程组的解要在平方误差项RSS和正则化项之间折中,及出现在图中平方误差项等值线与正则化项等值线相交处。从上图可以看出,使用L1范数时平方误差项等值线与正则化等值线的交点常常出现在坐标轴上,即w1或者w2为0,而在采用L2范数时,两者交点往往出现在某个象限中,即w1或者w2均非0,也就是说,L1范数比L2范数更易得到稀疏解。
弹性网络ElasticNet
弹性网络的目标函数:

弹性网络则是同时使用了L1和L2作为正则化项,ElasticNet在sklearn的地址:ElasticNet
参数中
l1_ratio为L1范数惩罚项所占比例,0 <= l1_ratio <= 1。若l1_ratio =0时,弹性网络退化为ridge(只剩L2范数的惩罚项)。参数中alpha即为上式中的α,越大对参数惩罚越大,越不容易过拟合。
使用样例:import numpy as np
from sklearn import linear_model ###############################################################################
# Generate sample data
n_samples_train, n_samples_test, n_features = 75, 150, 500
np.random.seed(0)
coef = np.random.randn(n_features)
coef[50:] = 0.0 # only the top 10 features are impacting the model
X = np.random.randn(n_samples_train + n_samples_test, n_features)
y = np.dot(X, coef) # Split train and test data
X_train, X_test = X[:n_samples_train], X[n_samples_train:]
y_train, y_test = y[:n_samples_train], y[n_samples_train:] ###############################################################################
# Compute train and test errors
alphas = np.logspace(-5, 1, 60)
enet = linear_model.ElasticNet(l1_ratio=0.7)
train_errors = list()
test_errors = list()
for alpha in alphas:
enet.set_params(alpha=alpha)
enet.fit(X_train, y_train)
train_errors.append(enet.score(X_train, y_train))
test_errors.append(enet.score(X_test, y_test)) i_alpha_optim = np.argmax(test_errors)
alpha_optim = alphas[i_alpha_optim]
print("Optimal regularization parameter : %s" % alpha_optim) # Estimate the coef_ on full data with optimal regularization parameter
enet.set_params(alpha=alpha_optim)
coef_ = enet.fit(X, y).coef_ ###############################################################################
# Plot results functions import matplotlib.pyplot as plt
plt.subplot(2, 1, 1)
plt.semilogx(alphas, train_errors, label='Train')
plt.semilogx(alphas, test_errors, label='Test')
plt.vlines(alpha_optim, plt.ylim()[0], np.max(test_errors), color='k',
linewidth=3, label='Optimum on test')
plt.legend(loc='lower left')
plt.ylim([0, 1.2])
plt.xlabel('Regularization parameter')
plt.ylabel('Performance') # Show estimated coef_ vs true coef
plt.subplot(2, 1, 2)
plt.plot(coef, label='True coef')
plt.plot(coef_, label='Estimated coef')
plt.legend()
plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.26)
plt.show()

周志华:机器学习
http://www4.stat.ncsu.edu/~post/josh/LASSO_Ridge_Elastic_Net_-_Examples.html
http://blog.csdn.net/qq_21904665/article/details/52315642
http://blog.peachdata.org/2017/02/07/Lasso-Ridge.html
变量的选择——Lasso&Ridge&ElasticNet的更多相关文章
- 《机器学习_01_线性模型_线性回归_正则化(Lasso,Ridge,ElasticNet)》
一.过拟合 建模的目的是让模型学习到数据的一般性规律,但有时候可能会学过头,学到一些噪声数据的特性,虽然模型可以在训练集上取得好的表现,但在测试集上结果往往会变差,这时称模型陷入了过拟合,接下来造一些 ...
- 【机器学习】Linear least squares, Lasso,ridge regression有何本质区别?
Linear least squares, Lasso,ridge regression有何本质区别? Linear least squares, Lasso,ridge regression有何本质 ...
- L1,L2范数和正则化 到lasso ridge regression
一.范数 L1.L2这种在机器学习方面叫做正则化,统计学领域的人喊她惩罚项,数学界会喊她范数. L0范数 表示向量xx中非零元素的个数. L1范数 表示向量中非零元素的绝对值之和. L2范数 表 ...
- php变量双击选择无法选择$符号
创建/Data/Packages/User/PHP.sublime-settings文件,内容为 { "word_separators": "./\\()\&qu ...
- [Scikit-learn] 1.5 Generalized Linear Models - SGD for Regression
梯度下降 一.亲手实现“梯度下降” 以下内容其实就是<手动实现简单的梯度下降>. 神经网络的实践笔记,主要包括: Logistic分类函数 反向传播相关内容 Link: http://pe ...
- 转载:线性回归建模–变量选择和正则化(1):R包glmnet
2013-07-15 21:41:04 #本文的目的在于介绍回归建模时变量选择和正则化所用的R包,如glmnet,ridge,lars等.算法的细节尽量给文献,这个坑太大,hold不住啊. 1.变 ...
- 再谈Lasso回归 | elastic net | Ridge Regression
前文:Lasso linear model实例 | Proliferation index | 评估单细胞的增殖指数 参考:LASSO回歸在生物醫學資料中的簡單實例 - 生信技能树 Linear le ...
- spss如何选择需要的变量?
spss如何选择需要的变量? 今天一位网友问我,spss如何在许多字段(变量)中选择我需要的字段,而不显示其他的字段呢? 这个问题问的很好,在实际的数据分析或者挖掘的过程中,都需要用这个来找出对商业问 ...
- ISLR系列:(4.1)模型选择 Subset Selection
Linear Model Selection and Regularization 此博文是 An Introduction to Statistical Learning with Applicat ...
随机推荐
- 小强的HTML5移动开发之路(38)——jqMobi插件ActionSheet
现在在手机客户端上Action Sheet非常常见,比如微信中的分享按钮菜单,下面我们使用jqMobi实现一个Action Sheet,如下: 首先右击上面的按钮选择审查元素(我用的是Chrome浏览 ...
- 混合使用C++语言和Objective-C语言
如果你的源文件扩展名是.m的,你还需要改成.mm,这样编译器才知道你将会在该文件中混合使用C++语言和Objective-C语言.
- radio选择事件 onchange事件 onclick事件
单选框按钮(radio)选择事件怎么设置呢? 既可以在radio标签里设置onclick事件实现,也可以设置它的onchange事件实现,效果一样,代码如下: <input id="r ...
- 【OpenGL】Shader实例分析(六)- 卡牌特效
转发请保持地址:http://blog.csdn.net/stalendp/article/details/30989295 本文将介绍怎么通过alpha通道来隐藏信息.并实现卡牌特效. 执行效果例如 ...
- 【BZOJ 1037】[ZJOI2008]生日聚会Party
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1037 [题意] [题解] /* 设f[i][j][k][l] 表示前i个人中,有j个男 ...
- 理解Java字符串常量池与intern()方法
String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...
- Atititjs javascript异常处理机制java异常转换.js exception process
Atititjs javascript异常处理机制java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw erro ...
- 改变浏览器中默认的ctrl+s方法
在一般的情况下,我们在浏览网页的时候按下ctrl+s,浏览器会弹出一个保存网页的框. 但是在一些特定的网页中,我们希望ctrl+s不是弹出默认的保存窗口,而是进行一下别的操作. 比如在我们使用简书的时 ...
- React Native细节记录
1.环境搭建部分 安装完node后建议设置npm镜像以加速后面的过程(或使用***工具).注意:不要使用cnpm!cnpm安装的模块路径比较奇怪,packager不能正常识别! npm config ...
- On-demand diverse path computation for limited visibility computer networks
In one embodiment, a source device detects a packet flow that meets criteria for multi-path forwardi ...