线性回归很简单,用线性函数拟合数据,用 mean square error (mse) 计算损失(cost),然后用梯度下降法找到一组使 mse 最小的权重。

lasso 回归和岭回归(ridge regression)其实就是在标准线性回归的基础上分别加入 L1 和 L2 正则化(regularization)。

本文的重点是解释为什么 L1 正则化会比 L2 正则化让线性回归的权重更加稀疏,即使得线性回归中很多权重为 0,而不是接近 0。或者说,为什么 L1 正则化(lasso)可以进行 feature selection,而 L2 正则化(ridge)不行。

线性回归——最小二乘

线性回归(linear regression),就是用线性函数 \(f(\bm x) = \bm w^{\top} \bm x + b\) 去拟合一组数据 \(D = \{(\bm x_1, y_1), (\bm x_2, y_2), ..., (\bm x_n, y_n)\}\) 并使得损失 \(J = \frac{1}{n}\sum_{i = 1}^n (f(\bm x_i) - y_i)^2\) 最小。线性回归的目标就是找到一组 \((\bm w^*, b^*)\),使得损失 \(J\) 最小。

线性回归的拟合函数(或 hypothesis)为:
\[
f(\bm x) = \bm w^{\top} \bm x + b
\tag{1}
\]

cost function (mse) 为:
\[
\begin{split}
J &= \frac{1}{n}\sum_{i = 1}^n (f(\bm x_i) - y_i)^2
\\ & = \frac{1}{n}\sum_{i = 1}^n (\bm w^{\top} \bm x_i + b - y_i)^2
\end{split}
\tag{2}
\]

Lasso回归和岭回归

Lasso 回归和岭回归(ridge regression)都是在标准线性回归的基础上修改 cost function,即修改式(2),其它地方不变。

Lasso 的全称为 least absolute shrinkage and selection operator,又译最小绝对值收敛和选择算子、套索算法。

Lasso 回归对式(2)加入 L1 正则化,其 cost function 如下:
\[
J = \frac{1}{n}\sum_{i = 1}^n (f(\bm x_i) - y_i)^2 + \lambda \|w\|_1
\tag{3}
\]

岭回归对式(2)加入 L2 正则化,其 cost function 如下:
\[
J = \frac{1}{n}\sum_{i = 1}^n (f(\bm x_i) - y_i)^2 + \lambda \|w\|_2^2
\tag{4}
\]

Lasso回归和岭回归的同和异:

  • 相同:

    • 都可以用来解决标准线性回归的过拟合问题。
  • 不同:
    • lasso 可以用来做 feature selection,而 ridge 不行。或者说,lasso 更容易使得权重变为 0,而 ridge 更容易使得权重接近 0。
    • 从贝叶斯角度看,lasso(L1 正则)等价于参数 \(\bm w\) 的先验概率分布满足拉普拉斯分布,而 ridge(L2 正则)等价于参数 \(\bm w\) 的先验概率分布满足高斯分布。具体参考博客 从贝叶斯角度深入理解正则化 -- Zxdon

也许会有个疑问,线性回归还会有过拟合问题?

加入 L1 或 L2 正则化,让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。

可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什幺影响,一种流行的说法是『抗扰动能力强』。具体参见博客 浅议过拟合现象(overfitting)以及正则化技术原理

为什么 lasso 更容易使部分权重变为 0 而 ridge 不行?

lasso 和 ridge regression 的目标都是 \(\min_{\bm w, b} J\),式(3)和(4)都是拉格朗日形式(with KKT条件),其中 \(\lambda\) 为 KKT 乘子,我们也可以将 \(\min_{\bm w, b} J\) 写成如下形式:

  • lasso regression:
    \[
    \begin{array}{cl}
    {\min \limits_{w, b}} & {\dfrac{1}{n}\sum_{i = 1}^n (\bm w^{\top} \bm x_i + b - y_i)^2}
    \\ {\text{s.t.}} &{\|w\|_1 \le t}
    \end{array}
    \tag{5}
    \]

  • ridge regression:
    \[
    \begin{array}{cl}
    {\min \limits_{w, b}} & {\dfrac{1}{n}\sum_{i = 1}^n (\bm w^{\top} \bm x_i + b - y_i)^2}
    \\ {\text{s.t.}} &{\|w\|_2^2 \le t}
    \end{array}
    \tag{6}
    \]

式(5)和(6)可以理解为,在 \(\bm w\) 限制的取值范围内,找一个点 \(\hat{\bm w}\) 使得 mean square error 最小,\(t\) 可以理解为正则化的力度,式(5)和(6)中的 \(t\) 越小,就意味着式(3)和(4)中 \(\lambda\) 越大,正则化的力度越大 。

以 \(\bm x \in R^2\) 为例,式(5)中对 \(\bm w\) 的限制空间是方形,而式(6)中对 \(\bm w\) 的限制空间是圆形。因为 lasso 对 \(\bm w\) 的限制空间是有棱角的,因此 \(\arg \min_{w, b} {\frac{1}{n}\sum_{i = 1}^n (\bm w^{\top} \bm x_i + b - y_i)^2}\) 的解更容易切在 \(\bm w\) 的某一个维为 0 的点。如下图所示:

Fig.1[1] Lasso (left) and ridge (right) regression.

Fig. 1 中的坐标系表示 \(\bm w\) 的两维,一圈又一圈的椭圆表示函数 \(J = {\frac{1}{n}\sum_{i = 1}^n (\bm w^{\top} \bm x_i + b - y_i)^2}\) 的等高线,椭圆越往外,\(J\) 的值越大,\(\bm w^*\) 表示使得损失 \(J\) 取得全局最优的值。使用 Gradient descent,也就是让 \(\bm w\) 向着 \(\bm w^*\) 的位置走。如果没有 L1 或者 L2 正则化约束,\(\bm w^*\) 是可以被取到的。但是,由于有了约束 \(\|w\|_1 \le t\) 或 \(\|w\|_2^2 \le t\),\(\bm w\) 的取值只能限制在 Fig. 1 所示的灰色方形和圆形区域。当然调整 \(t\) 的值,我么能够扩大这两个区域。

等高线从低到高第一次和 \(\bm w\) 的取值范围相切的点,即是 lasso 和 ridge 回归想要找的权重 \(\hat{\bm w}\)。

lasso 限制了 \(\bm w\) 的取值范围为有棱角的方形,而 ridge 限制了 \(\bm w\) 的取值范围为圆形,等高线和方形区域的切点更有可能在坐标轴上,而等高线和圆形区域的切点在坐标轴上的概率很小。这就是为什么 lasso(L1 正则化)更容易使得部分权重取 0,使权重变稀疏;而 ridge(L2 正则化)只能使权重接近 0,很少等于 0。

正是由于 lasso 容易使得部分权重取 0,所以可以用其做 feature selection,lasso 的名字就指出了它是一个 selection operator。权重为 0 的 feature 对回归问题没有贡献,直接去掉权重为 0 的 feature,模型的输出值不变。

对于 ridge regression 进行 feature selection,你说它完全不可以吧也不是,weight 趋近于 0 的 feature 不要了不也可以,但是对模型的效果还是有损伤的,这个前提还得是 feature 进行了归一化。

References

[1] Tibshirani, R. (1996). Regression Shrinkage and Selection Via the Lasso. Journal Of The Royal Statistical Society: Series B (Methodological), 58(1), 267-288. doi: 10.1111/j.2517-6161.1996.tb02080.x
[2] Lasso算法 -- 维基百科
[3] 机器学习总结(一):线性回归、岭回归、Lasso回归 -- 她说巷尾的樱花开了
[4] 从贝叶斯角度深入理解正则化 -- Zxdon
[5] 浅议过拟合现象(overfitting)以及正则化技术原理 -- 闪念基因

线性回归——lasso回归和岭回归(ridge regression)的更多相关文章

  1. 机器学习--Lasso回归和岭回归

    之前我们介绍了多元线性回归的原理, 又通过一个案例对多元线性回归模型进一步了解, 其中谈到自变量之间存在高度相关, 容易产生多重共线性问题, 对于多重共线性问题的解决方法有: 删除自变量, 改变数据形 ...

  2. 在线场景感知:图像稀疏表示—ScSPM和LLC总结(以及lasso族、岭回归)

    前言: 场景感知其实不分三维场景和二维场景,可以使用通用的方法,不同之处在于数据的形式,以及导致前期特征提取及后期在线场景分割过程.场景感知即是场景语义分析问题,即分析场景中物体的特征组合与相应场景的 ...

  3. 机器学习方法:回归(二):稀疏与正则约束ridge regression,Lasso

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. "机器学习方法"系列,我本着开放与共享(open and share)的精神撰写,目的是 ...

  4. 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归

    注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...

  5. 机器学习之五 正则化的线性回归-岭回归与Lasso回归

    机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...

  6. Sklearn库例子3:分类——岭回归分类(Ridge Regression )例子

    为了解决数据的特征比样本点还多的情况,统计学家引入了岭回归. 岭回归通过施加一个惩罚系数的大小解决了一些普通最小二乘的问题.回归系数最大限度地减少了一个惩罚的误差平方和. 这里是一个复杂的参数,用来控 ...

  7. 多重共线性的解决方法之——岭回归与LASSO

          多元线性回归模型 的最小二乘估计结果为 如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大 并且不一样的样本也会导致参数估计值变化非常大.即参数估 ...

  8. 大白话5分钟带你走进人工智能-第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归

    第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归 上一节中我们讲解了L1和L2正则的概念,知道了L1和L2都会使不重要的维度权重下降得多,重要的维度权重下降得少,引入 ...

  9. 标准方程法_岭回归_LASSO算法_弹性网

    程序所用文件:https://files.cnblogs.com/files/henuliulei/%E5%9B%9E%E5%BD%92%E5%88%86%E7%B1%BB%E6%95%B0%E6%8 ...

随机推荐

  1. FLUME NG的基本架构

    Flume简介 Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统.原名是 Flume OG (original generation),但随着 FLume 功能 ...

  2. Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑(二)

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...

  3. django之ORM字段及参数

    目录 ORM字段及参数 orm常用字段 字段合集 自定义char字段 字段参数 外键字段的参数 ORM字段及参数 orm常用字段 字段名 说明 AutoField 如果自己没有定义主键id,djang ...

  4. os 和 sys 的模块使用方法和模块

    os  的模块  方法 os.remove()删除文件 os.rename()重命名文件 os.walk()生成目录树下的所有文件名 os.chdir()改变目录 os.mkdir/maked ...

  5. SSM框架(Spring + Spring MVC + Mybatis)搭建

    Spring是一个轻量级的框架,用到了注解和自动装配,就是IOC和AOP: SpringMVC是Spring实现的一个Web层,相当于Struts的框架: Mybatis是 一个持久层的框架,在使用上 ...

  6. [Pytorch Bug] "EOFError: Ran out of input" When using Dataloader with num_workers=x

    在Windows上使用Dataloader并设置num_workers为一个非零数字,enumerate取数据时会引发"EOFError: Ran out of input"的报错 ...

  7. golang数据结构之稀疏数组

    掌握知识: 数组的初始化和赋值 结构体的初始化和赋值 字符串和整型之间的转换以及其它的一些操作 类型断言 读取文件 写入文件 对稀疏数组进行压缩 package main import ( " ...

  8. SpringMVC拦截器和数据校验

    1.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求 ...

  9. 用sticky.js实现头部导航栏固定

    在页面中,如果页面长度过大,滑动页面时,头部导航栏则会跟着划走. 我的头部导航栏代码为: <div class="headbar"> <center class= ...

  10. Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题

    Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题 1:说明 使用Eclipse 编写xml文件的约束文件的,包括DTD约束文件,Schema约束文件的时候, 我们也需要接受eclip ...