机器学习方法:回归(二):稀疏与正则约束ridge regression,Lasso
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
“机器学习方法“系列,我本着开放与共享(open and share)的精神撰写,目的是让更多的人了解机器学习的概念,理解其原理,学会应用。希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入,在交流中拉通——算法与技术,让理论研究与实际应用深度融合;也希望能有大牛能来,为大家解惑授业,福泽大众。推广开放与共享的精神。如果人多我就组织一些读书会,线下交流。
本节的内容需要依赖上一节已经讲了的机器学习:概念到理解(一):线性回归,线性回归的模型是这样的,对于一个样本xi,它的输出值是其特征的线性组合:
其中,w0称为截距,或者bias,上式中通过增加xi0=1把w0也吸收到向量表达中了,简化了形式,因此实际上xi有p+1维度。
线性回归的目标是用预测结果尽可能地拟合目标label,用最常见的Least square作为loss function:
可以直接求出最优解:
看起来似乎很简单,但是在实际使用的过程中会有不少问题,其中一个主要问题就是上面的协方差矩阵不可逆时,目标函数最小化导数为零时方程有无穷解,没办法求出最优解。尤其在p>n时,必然存在这样的问题,这个时候也存在overfitting的问题。这个时候需要对w做一些限制,使得它的最优解空间变小,也就是所谓的regularization,正则。
ridge regression
最为常见的就是对w的模做约束,如ridge regression,岭回归,就是在线性回归的基础上加上l2-norm的约束,loss function是(习惯上一般会去掉前面线性回归目标函数中的常数项1n,同时为了后面推导的简洁性会加上一个12):
有解析解:
其中λ>0是一个参数,有了正则项以后解就有了很好的性质,首先是对w的模做约束,使得它的数值会比较小,很大程度上减轻了overfitting的问题;其次是上面求逆部分肯定可以解,在实际使用中ridge regression的作用很大,通过调节参数λ,可以得到不同的回归模型。
实际上ridge regression可以用下面的优化目标形式表达:
也就是说,我依然优化线性回归的目标,但是条件是w的模长不能超过限制θ。上面两种优化形式是等价的,可以找到一 一对应的λ和θ。
稀疏约束,Lasso
先看一下几种范式(norm)的定义,
如前面的ridge regression,对w做2范式约束,就是把解约束在一个l2-ball里面,放缩是对球的半径放缩,因此w的每一个维度都在以同一个系数放缩,通过放缩不会产生稀疏的解——即某些w的维度是0。而实际应用中,数据的维度中是存在噪音和冗余的,稀疏的解可以找到有用的维度并且减少冗余,提高回归预测的准确性和鲁棒性(减少了overfitting)。在压缩感知、稀疏编码等非常多的机器学习模型中都需要用到稀疏约束。
稀疏约束最直观的形式应该是约束0范式,如上面的范式介绍,w的0范式是求w中非零元素的个数。如果约束∥w∥0≤k,就是约束非零元素个数不大于k。不过很明显,0范式是不连续的且非凸的,如果在线性回归中加上0范式的约束,就变成了一个组合优化问题:挑出≤k个系数然后做回归,找到目标函数的最小值对应的系数组合,是一个NP问题。
有趣的是,l1-norm(1范式)也可以达到稀疏的效果,是0范式的最优凸近似,借用一张图[1]:
很重要的是1范式容易求解,并且是凸的,所以几乎看得到稀疏约束的地方都是用的1范式。
回到本文对于线性回归的讨论,就引出了Lasso(least absolute shrinkage and selection operator) 的问题:
也就是说约束在一个l1-ball里面。ridge和lasso的效果见下图:
红色的椭圆和蓝色的区域的切点就是目标函数的最优解,我们可以看到,如果是圆,则很容易切到圆周的任意一点,但是很难切到坐标轴上,因此没有稀疏;但是如果是菱形或者多边形,则很容易切到坐标轴上,因此很容易产生稀疏的结果。这也说明了为什么1范式会是稀疏的。
Lasso稀疏性的进一步理解:
类似Ridge,我们也可以写出Lasso的优化目标函数:
根据一般的思路,我们希望对JL(w)求导数=0求出最优解,即▽JL(w)=0,但是l1-norm在0点是连续不可导的,没有gradient,这个时候需要subgradient:
定义1:记f:U→R是一个定义在欧式空间凸集Rn上的实凸函数,在该空间中的一个向量v称为f在点x0∈U的次梯度(subgradient),如果对于任意x∈U,满足f(x)−f(x0)≥v⋅(x−x0)成立。
其中⋅是向量的点积。由在点x0处的所有subgradient所组成的集合称为x0处的subdifferential,记为∂f(x0)。注意subgradient和subdifferential只是对凸函数定义的。例如一维的情况,f(x)=|x|,在x=0处的 subdifferential就是[−1,1]这个区间(集合)。又例如下图中,在x0点不同红线的斜率就是表示subgradient的大小,有无穷多。
图 subgradient
注意在x的gradient存在的点,subdifferential 将是由gradient构成的一个单点集合。这样就将 gradient 的概念加以推广了。这个推广有一个很好的性质(condition for global minimizer)。以下部分参考了[3],是浙大毕业去MIT的一个牛人的博客,看了以后自己再照着重写了一遍。
性质1:点x0是凸函数f的全局最小值,当且仅当0∈∂f(x0)。
很容易理解,看上面的图,在x0点不是全局最小值,因为subgradient不包含0,而原点0就是全局最小值。如果要证明也很显然,将0∈∂f(x0)带入前面的定义1中,就得到f(x)≥f(x0)。
为了方便说明,需要做一个简化假设,即数据X的列向量是orthonormal的[2,3],即XTX=I(当然没有这个假设Lasso也是可以运作的)。于是线性回归的最优解是
假设lasso问题JL(w)的全局最优解是w¯∈Rn,考察它的任意一个维度w¯j,需要分别讨论两种情况:
情况1:gradient存在的区间,即w¯j≠0
由于gradient在最小值点=0,所以
所以
其中λ≥0。所以
很容易看出,w¯j和w∗j是同号的,因此可以得出
最后得到
其中(x)+表示取x的正数部分;(x)+=max(x,0)。
情况2:gradient不存在,即w¯j=0
根据前面的性质1,如果w¯j是最小值,则
其中e是一个向量,每一个元素ej∈[−1,1],使得0=−w∗j+λ⋅ej成立。因此
所以和情况(1)和(2)可以合并在一起。所以呢,如果在这种特殊的orthonormal情况下,我们可以直接写出Lasso的最优解:
OK,再回顾一下前面的ridge regression,如果也考虑上面说的orthonormal情况下,可以很容易得出最优解为
很容易得出结论,ridge实际上就是做了一个放缩,而lasso实际是做了一个soft thresholding,把很多权重项置0了,所以就得到了稀疏的结果!
除了做回归,Lasso的稀疏结果天然可以做机器学习中的另外一件事——特征选择feature selection,把非零的系数对应的维度选出即可,达到对问题的精简、去噪,以及减轻overfitting。
上面是做了简化后的讨论,实际中lasso求解还要复杂的多。在下一篇文章中,将描述和Lasso非常相关的两种方法,forward stagewise selection和最小角回归least angle regression(LARS),它们三者产生的结果非常接近(几乎差不多),并且都是稀疏的,都可以做feature selection。有的时候就用Lars来作为Lasso的目标的解也是可以的。
参考资料
[1] http://blog.csdn.net/zouxy09/article/details/24971995
[2] The elements of statistical learning, ch3
[3] http://freemind.pluskid.org/machine-learning/sparsity-and-some-basics-of-l1-regularization/
[4] http://en.wikipedia.org/w/index.php?title=Subderivative&redirect=no#The_subgradient
机器学习方法:回归(二):稀疏与正则约束ridge regression,Lasso的更多相关文章
- 关于”机器学习方法“,"深度学习方法"系列
"机器学习/深度学习方法"系列,我本着开放与共享(open and share)的精神撰写,目的是让很多其它的人了解机器学习的概念,理解其原理,学会应用.如今网上各种技术类文章非常 ...
- 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有
本文已参与「新人创作礼」活动,一起开启掘金创作之路. 线性模型简介 所谓线性模型就是通过数据的线性组合来拟合一个数据,比如对于一个数据 \(X\) \[X = (x_1, x_2, x_3, ..., ...
- 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...
- 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...
- 机器学习方法:回归(一):线性回归Linear regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...
- 美团网基于机器学习方法的POI品类推荐算法
美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...
- 机器学习方法、距离度量、K_Means
特征向量 1.特征向量:以人为例,每个元素可能就对应这人的某些方面,这就是特征,例如:身高.年龄.性别.国际....2.特征工程:目的就是将现有数据中可作为信号的特征与那些仅是噪声的特征区分开来:当数 ...
- 不平衡数据下的机器学习方法简介 imbalanced time series classification
imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...
- Stanford机器学习---第六讲. 怎样选择机器学习方法、系统
原文:http://blog.csdn.net/abcjennifer/article/details/7797502 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
随机推荐
- [BJOI2018]求和
link 其实可以用$sum(i,j)$表示从$i$到$1$的$k$次方的值,然后就是$lca$的基本操作 注意,能一起干的事情就一起搞,要不会超时 #include<iostream> ...
- Dalvik虚拟机中DexClassLookup结构解析
http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的 ...
- selenium - webdriver - ActionChains类(鼠标操作)
ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_click() ...
- HTML学习基本代码
HTML的代码比较繁琐,在此记下一些基本的东西,以后自己回来看看 <html> <head> <title>我的人生啊</title> <styl ...
- uva 11424
uva 11424 GCD - Extreme (I) 题意:思路:(见http://www.cnblogs.com/Duahanlang/p/3184994.html ) 差别在于数据规模和时间,其 ...
- javascript实现正整数分数约分
//m,n为正整数的分子和分母 function reductionTo(m, n) { var arr = []; if (!isInteger(m) || !isInteger(n)) { con ...
- [freemarker篇]05.关于集合的遍历
人啊,有的时候就是没有办法坚持一些事情,总是因为各种理由在推脱,逐渐就变成了拖延症!例如胖先生的减肥计划,其实本来就没有计划,属于散漫形式的!一直减肥,一直在肥!总是说没有时间,没有时间!其实有时候就 ...
- j2ee 项目部署指引
j2ee相关的项目一般是web工程或java application,部署到linux服务器上,本文结合自己的经验.教训,总结下部署的过程. 一.准备阶段 部署前要做的事情: 1.明确自己的产品都包含 ...
- Struts2入门(1)-第一个Struts2程序
目录结构 C:\WorkSpace\java\StrutsTest\src\main C:\WorkSpace\java\StrutsTest\src\test C:\WorkSpace\java\S ...
- Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766
最近发现Lucene6.6版本添加索引数据字符数超过32766时,出现报错,而Lucene4.6版本中则未出现这一问题,原因如下: 概述: 添加索引数据时,对于分词字段,分词后的Ter ...