lasso的今世前身
lasso的今世前身
引言
年关将至,少不了写年终总结。自己也绞尽脑汁对研读的统计文献做一个总结。我们来聊聊20年前诞生的lasso。lasso理论文章由统计学家Tibshirani, R在于1996年提出,并获得了里程碑式的影响。简单概述,lasso的目的就是选择合适的自变量。茫茫变量中怎么遇见合适的它。
此处说明下我们为什么要进行选变量这个动作?
-变量维数多并且变量之间存在相关关系,所以剔除不重要的变量,选择合适的变量成为了统计学习里面的一个重点。
传统选变量方法
(1). Cp C_p统计量
数学公式为: Cp=RSSqδ2−(n−2q) C_p=\dfrac{RSS_q} {\delta^2}-(n-2q)
(2). AIC AIC准则
数学公式为:AIC= nln(RSSq)+2q n\ln(RSS_q)+2q
(3). BIC BIC准则
数学公式: BIC=−2ln(RSSq)+ln(n)∗k BIC=-2\ln(RSS_q) + \ln(n)*k
其中 RSSq RSS_q是在该模型下的残差平方和,q是模型的变量个数。
R语言中有AIC,BIC函数。
lm1 <- lm(Fertility ~ . , data = swiss)
lm2 <- update(lm1, . ~ . -Examination)
AIC(lm1, lm2)
BIC(lm1, lm2)
注意这些规则只是刻画了用某个模型之后相对“真实模型”的信息损失【因为不知道真正的模型是什么样子,所以训练得到的所有模型都只是真实模型的一个近似模型】。
这些规则理论上是比较漂亮的,但是实际在模型选择中应用起来还是有些困难的,
(1).茫茫变量中这种枚举的方式,计算量太大,典型的NP问题。
(2).通过这种离散的方式选择变量,模型并不稳定。即数据有许变化,模型就会有所改变。
所以上述方法更适合于模型之间的比较。
岭估计
针对变量之间存在相关性,引入岭的概念,使得 XTX X^TX的均逆可得,避免病态矩阵的情况。
这有效避免了逆的问题,但是岭估计是在全体集合上进行计算,不能选择合适的子集。
在高维统计中,基于岭的惩罚会存在大量的非0变量,而且相对于其他估计方法系数偏小。
R语言中岭估计调用的函数:
lm.ridge(y ~ ., longley)
plot(lm.ridge(y ~ ., longley, lambda = seq(0,0.1,0.001)))
非负代理(Non-negative Garrote)
追溯到1993年,Breiman, L老先生提出了Non-negative Garrote方法进行选择更好的子集。这是lasso的前身。
解释:给予变量系数一定的权重,但是对于权重的和有约束。
lasso(least absolute shrinkage and selection operato)
96年Tibshirani, R在Non-negative Garrote方法的基础上,直接对于变量的系数进行L1正则化。
t t 值控制了收缩情况。tt 值越大,变量收缩较小; t t 值越小,变量收缩越大,部分变量系数变成0。所以lasso具有重要的稀疏性质。
图片展示了p=2情况下,岭估计和lasso估计的几何图解。图中我们可以发现lasso估计的置信椭球和约束菱形的交点在坐标轴上,说明另一变量系数可以为0,而岭估计交点不会出现在坐标轴上。
根据 Lagrangian对偶方法,我们将上面的函数形式转化为:
所以lasso问题是一个非线性、不可微函数优化问题,求解过程不容易。
lasso求解
FU(1998)提出shooting优化算法。Lagrangian对偶问题可以对满足KKT条件的问题用导数形式进行求解。 针对xjx_j求导:
2 xpj x_j^p xj x_j βj \beta_j+ ∑i≠j \sum_{i\not=j}2 xpj x_j^p xj x_j βj \beta_j-2 xpj x_j^p y y=-λ\lambdasign( βj \beta_j)
所以左式是 βj \beta_j的线性函数,右式是 λ \lambda的分段函数。
由图可知左式截距在- λ \lambda于 λ \lambda之间无解,位于[- ∞ \infty ,- λ \lambda]和[ λ \lambda, ∞ \infty ]两端有解。
那么 βj \beta_j的解为:
此处 S0 S_0为截距项 ∑i≠j \sum_{i\not=j}2 xpj x_j^p xj x_j βj \beta_j-2 xpj x_j^p y y。从β1\beta_1至 βp \beta_p循环,循环多次直至所有变量系数收敛。
这种方法其实就是我们在处理类似lasso及其广义lasso中常用的坐标下降算法。P. TSENG在论文中证明了其中的收敛性问题。2007年Jerome Friedman在论文中将归纳坐标下降算法在lasso、elastic net、group lasso等广义lasso中的运用情况,给出了相应的解析解表达形式。
lasso:
elastic net:
S S在这里是一个软阀值算子。
其中这里的变量xx先进行标准化处理, y^ji \hat{y}_i^{j}= β0 \beta_0+ ∑i≠j \sum_{i\not=j} xj x_j βj \beta_j。每个变量迭代算法如同上述表示,p个变量均不断循环遍历直至均收敛。
2010年Jerome Friedman的文章中拓展了2007年的工作,针对高维广义线性模型提出了更加快捷的算法,并提供了R包glmnet。
这里只介绍迭代过程中的小技巧。针对表达形式中的 1N∑Ni=1xij(yi−y^ji) \dfrac{1}{N}\sum_{i=1}^{N}x_j^i(y_i-\hat{y}_i^{j}),文章中提供了两种迭代方法。
1、原始迭代方法:
y^i \hat{y}^{i}是现在 i i观测值模型拟合值,利用现在模型的残差进行下一次迭代的计算。
2、协方差迭代:
利用内积的方式进行计算,我们需要计算每个变量与yy的内积 <xj,y> <script type="math/tex" id="MathJax-Element-229"> </script>,当有变量进入模型时我们需要计算它与其他变量之间的内积 <xj,xk> <script type="math/tex" id="MathJax-Element-230"> </script>。当 βj \beta_j改变时,我们进行一次迭代运算。
参考:
lasso的今世前身相关推荐
- lasso变形(一)----group lasso
一.引言 在现实生活中,协变量之间存在一些组结构,那么在进行变量选择时都应该同时选入模型中. 例1:在分类数据中,我们通常处理方式是将其变成哑变量.如地域:江苏.浙江.上海.这时需要设置2个哑变量(n ...
- 余文波:区块链在九大领域的应用
文章目录 前言 金融行业 支付 清算与结算 保险 供应链管理 知识产权 产品的防伪溯源 医疗数据的管理 身份管理 公共管理 审计 物联网.AI大数据的数据安全 结语 今天一番给大家推荐一个讲座录音,给 ...
- 计算机主板外频,电脑装机小知识,了解外频和倍频的前身今世,掌握超频进阶小技巧...
进阶的超频小知识分享 喜欢超频的小伙伴一定对外频和倍频这两个概念并不陌生,CPU频率=外频X倍频.这些内容我在前面的超频小分享中已经基本谈到过. 但是你知道吗?在开始的时候,其实CPU频率和外频是一样 ...
- 一文读懂线性回归、岭回归和Lasso回归
(图片由AI科技大本营付费下载自视觉中国) 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失 ...
- R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)
R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...
- Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型 目录
- R语言基于LASSO进行特征筛选(feature selection)
R语言基于LASSO进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featur ...
- R构建lasso回归模型并获得最佳正则化系数
R构建lasso回归模型并获得最佳正则化系数 目录 R构建lasso回归模型并获得最佳正则化系数 数据加载 拟合LASSO回归模型
- python包Yellowbrick可视化lasso模型的最佳alpha值及误测误差
Yellowbrick可视化lasso模型的最佳alpha值及误测误差 目录 Yellowbrick可视化lasso模型的最佳alpha值及误测误差 最佳alpha值选择
最新文章
- 计算机考研我该如何准备,计算机考研该如何准备呢-考研初试
- java实现随机验证码的图片
- 做python自动化得时候怎么添加断言_在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例。就像功能测试一样,当测试人员做了一些操作...
- Android 条码扫描程序源码
- SAP WebIDE登录时,有时会发生超时现象
- 通用时区:你应该知道的数据库时区知识
- 2021牛气新年素材模板,你真的不来看一看吗?
- 张一鸣在字节跳动7周年庆典上的演讲
- MATLAB从入门到精通-Matlab读取fnl.grib2文件
- AWT绘图工具Graphics
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
- redis 底层数据结构详解
- 【练习】面向对象系列(002)——双色球
- 面试时谈得很好,事后没有电话给通知,这个时候应该怎么办?
- 三年经验前端社招——众安保险
- 计算机 屏幕卡住,电脑屏幕突然卡死应该怎么办?
- 香港特首林郑月娥:希望阿里巴巴能够回香港上市
- Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定和功能失效的解决思路
- AI算法工程师岗位职责解析
- Android 贝塞尔曲线解析
热门文章
- HTML5标签canvas制作平面图
- 周杰伦 jay《最长的电影》mp3 下载/试听/MV/在线播放
- 泰语7个元音变形_泰语元音的三种拼合方式
- Node安装教程(超详细图解)
- 常用javascript大全
- thymeleaf th:each根据整数循环
- K8S -- kubernetes集群权限之Cluster、 User和Context
- 张小龙近4年微信公开课演讲视频
- 电影推荐算法---HHR计划
- python可视化框架英文论文_使用Python打造 基于Spacy的在线英文依存语法可视化器v0...