lasso回归与岭回归

简介

lasso回归(Least Absolute Shrinkage and Selection Operator Regression)与岭回归(Ridge Regression)以线性回归为基础,在其之上做出了一定的改进。

Preliminaries and Notation:线性回归

对于一个线性回归模型,我们有:

假设数据集中共有 nnn 个变量,包含 mmm 个数据。数据集形似

x=[x1(1)x1(2)⋯x1(n)x2(1)x2(2)⋯x2(n)⋮⋮⋱⋮xm(1)xm(2)⋯xm(n)]m×n(1)x = \left [ \begin{matrix} x_1^{(1)} & x_1^{(2)} & \cdots & x_1^{(n)}\\ x_2^{(1)} & x_2^{(2)} & \cdots & x_2^{(n)}\\ \vdots & \vdots & \ddots & \vdots \\ x_m^{(1)} & x_m^{(2)} & \cdots & x_m^{(n)}\\ \end{matrix} \right ]_{m \times n} \tag{1} x=⎣⎢⎢⎢⎢⎡​x1(1)​x2(1)​⋮xm(1)​​x1(2)​x2(2)​⋮xm(2)​​⋯⋯⋱⋯​x1(n)​x2(n)​⋮xm(n)​​⎦⎥⎥⎥⎥⎤​m×n​(1)

数据集 xxx 中每一列代表一个变量,每一行代表一个数据。矩阵 xxx 可被进一步表示为:
x=[x(1),x(2),⋯,x(n)]=[x1,x2,⋯,xm]T(2)x = [x^{(1)}, x^{(2)}, \cdots, x^{(n)}] = [x_1, x_2, \cdots, x_m]^T \\ \tag{2} x=[x(1),x(2),⋯,x(n)]=[x1​,x2​,⋯,xm​]T(2)

其中

x(i)=[x1(i)x2(i)⋮xm(i)],xi=[xi(1)xi(2)⋮xi(n)].(3)x^{(i)} = \left [ \begin{matrix} x_1^{(i)} \\ x_2^{(i)} \\ \vdots \\ x_m^{(i)} \\ \end{matrix} \right ] , \ \ x_i = \left [ \begin{matrix} x_i^{(1)} \\ x_i^{(2)} \\ \vdots \\ x_i^{(n)} \\ \end{matrix} \right ]. \tag{3} x(i)=⎣⎢⎢⎢⎢⎡​x1(i)​x2(i)​⋮xm(i)​​⎦⎥⎥⎥⎥⎤​,  xi​=⎣⎢⎢⎢⎢⎡​xi(1)​xi(2)​⋮xi(n)​​⎦⎥⎥⎥⎥⎤​.(3)

并取
X=[1,x]=[1x1(1)⋯x1(n)1x2(1)⋯x2(n)⋮⋮⋱⋮1xm(1)⋯xm(n)]m×(n+1),x^i=[1xi].(4)X = [1, x] = \left [\begin{matrix}1 & x_1^{(1)} & \cdots & x_1^{(n)}\\ 1 & x_2^{(1)} & \cdots & x_2^{(n)}\\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_m^{(1)} & \cdots & x_m^{(n)}\\\end{matrix} \right ]_{m \times (n+1)}, \hat x_i = \left [\begin{matrix}1 \\x_i \end{matrix}\right]. \tag{4} X=[1,x]=⎣⎢⎢⎢⎢⎡​11⋮1​x1(1)​x2(1)​⋮xm(1)​​⋯⋯⋱⋯​x1(n)​x2(n)​⋮xm(n)​​⎦⎥⎥⎥⎥⎤​m×(n+1)​,x^i​=[1xi​​].(4)
已知每个数据对应的真实值,并用 .^\hat ..^ 来表示对应的预测值或估计值:
Y=[y1y2⋮ym],Y^=[y^1y^2⋮y^m].(5)\begin{aligned} & Y = \left [ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{matrix} \right ], \end{aligned} \hat Y = \left [ \begin{matrix} \hat y_1 \\ \hat y_2 \\ \vdots \\ \hat y_m \end{matrix} \right ]. \tag{5} ​Y=⎣⎢⎢⎢⎡​y1​y2​⋮ym​​⎦⎥⎥⎥⎤​,​Y^=⎣⎢⎢⎢⎡​y^​1​y^​2​⋮y^​m​​⎦⎥⎥⎥⎤​.(5)
取系数向量为
β=[β0β1⋮βn](6)\beta = \left [ \begin{matrix} \beta_0 \\ \beta_1 \\ \vdots \\ \beta_n \\ \end{matrix} \right ] \tag{6} β=⎣⎢⎢⎢⎡​β0​β1​⋮βn​​⎦⎥⎥⎥⎤​(6)
则我们对应的线性模型即为
y^i=βTx^iY^=Xβ(7)\begin{aligned} & \hat y_i = \beta^T\hat x_i \\ & \hat Y = X\beta \end{aligned} \tag{7} ​y^​i​=βTx^i​Y^=Xβ​(7)
对于线性回归,其目标(成本)函数为
J(β)=1m∑i=1m(yi−y^i)2=1m∑i=1m(yi−x^iβ)2=1m∣∣Y−Xβ∣∣22(8)J(\beta) = \frac{1}{m}\sum_{i=1}^m(y_i - \hat y_i)^2 = \frac{1}{m}\sum_{i=1}^m(y_i - \hat x_i \beta)^2 = \frac{1}{m}||Y-X\beta||_2^2 \tag{8} J(β)=m1​i=1∑m​(yi​−y^​i​)2=m1​i=1∑m​(yi​−x^i​β)2=m1​∣∣Y−Xβ∣∣22​(8)
对应最优的系数估计 β^\hat \betaβ^​ 即为
β^=arg⁡min⁡βJ(β)=arg⁡min⁡β1m∣∣Y−Xβ∣∣22(9)\hat \beta = \mathop{\arg\min}_{\beta} J(\beta) = \mathop{\arg\min}_{\beta} \frac{1}{m}||Y-X\beta||_2^2 \tag{9} β^​=argminβ​J(β)=argminβ​m1​∣∣Y−Xβ∣∣22​(9)
我们之前已经推导过,线性回归最优的 β\betaβ 为:
β^=(XTX)−1XTY(10)\hat \beta = (X^TX)^{-1}X^TY \tag{10} β^​=(XTX)−1XTY(10)

LASSO回归与岭回归

lasso回归与岭回归建立在原线性回归的基础上。为了防止系数向量中某些系数很大,而另一些系数又很小,我们希望在成本函数中加入系数的惩罚项,即将成本函数做出以下变化:
C1(β)=J(β)+λ∣∣β∣∣1=1m∣∣Y−Xβ∣∣22+λ∣∣β∣∣1,C2(β)=J(β)+λ∣∣β∣∣2=1m∣∣Y−Xβ∣∣22+λ∣∣β∣∣22(11)\begin{aligned} & C_1(\beta) = J(\beta) + \lambda ||\beta||_1 = \frac{1}{m}||Y-X\beta||_2^2 + \lambda||\beta||_1, \\ & C_2(\beta) = J(\beta) + \lambda ||\beta||_2 = \frac{1}{m}||Y-X\beta||_2^2 + \lambda||\beta||_2^2 \end{aligned} \tag{11} ​C1​(β)=J(β)+λ∣∣β∣∣1​=m1​∣∣Y−Xβ∣∣22​+λ∣∣β∣∣1​,C2​(β)=J(β)+λ∣∣β∣∣2​=m1​∣∣Y−Xβ∣∣22​+λ∣∣β∣∣22​​(11)
其中,λ>0\lambda >0λ>0; ∣∣β∣∣1,∣∣β∣∣2||\beta||_1, ||\beta||_2∣∣β∣∣1​,∣∣β∣∣2​ 分别为系数向量 β\betaβ 的L1范数与L2范数,具体为
∣∣β∣∣1=∑i=0m∣βi∣,∣∣β∣∣2=∑i=0mβi2(12)\begin{aligned} & ||\beta||_1 = \sum_{i=0}^m |\beta_i|, \\ & ||\beta||_2 = \sqrt{\sum_{i=0}^m \beta_i^2} \end{aligned} \tag{12} ​∣∣β∣∣1​=i=0∑m​∣βi​∣,∣∣β∣∣2​=i=0∑m​βi2​​​(12)
如果在成本函数中加入的是L1范数,则其对应的模型即为LASSO回归;如果在成本函数中加入的是L2范数,则其对应的模型即为岭回归

我们一方面想要使得拟合出的直线有着最小的拟合误差,同时又希望拟合得到的系数不能太大,通过将两部分整合至一个成本函数中,可以实现这样一个目标。可以注意到,成本函数中,第一部分代表着拟合误差,第二部分代表着系数向量的大小,而超参数 λ\lambdaλ 作为它们的桥梁,平衡两者在成本函数中各自的权重。

在之前推导线性回归的最优系数解时,我们采用了对其目标函数求导取极值的方式,这样做的前提是目标函数连续可微,且应当是(下)凸函数。显而易见,成本函数 C1(β)C_1(\beta)C1​(β) 并不满足这一性质,因为绝对值项是连续、不可导的;而 C2(β)C_2(\beta)C2​(β) 是满足的。因此,我们可以采用同样的思路去求解岭回归,但对于LASSO回归,我们需要采用其他的方法求解。本次仅给出岭回归的求解。

岭回归的求解

岭回归对应的目标(成本)函数为
C2(β)=1m∣∣Y−Xβ∣∣22+λ∣∣β∣∣22=1m(Y−Xβ)T(Y−Xβ)+λβTβ=1m(YT−βTXT)(Y−Xβ)+λβTβ=1m(YTY−YTXβ−βTXTY+βTXTXβ)+λβTβ(13)\begin{aligned} C_2(\beta) = \frac{1}{m}||Y-X\beta||_2^2 + \lambda||\beta||_2^2 & = \frac{1}{m} (Y -X \beta)^{T} (Y - X \beta) + \lambda\beta^T\beta\\ & = \frac{1}{m} (Y^{T} - \beta^{T} X^{T}) (Y - X \beta) + \lambda\beta^T\beta\\ & = \frac{1}{m}(Y^{T} Y - Y^{T} X \beta - \beta^{T} X^{T} Y + \beta^{T} X^{T} X \beta) + \lambda\beta^T\beta \end{aligned} \tag{13} C2​(β)=m1​∣∣Y−Xβ∣∣22​+λ∣∣β∣∣22​​=m1​(Y−Xβ)T(Y−Xβ)+λβTβ=m1​(YT−βTXT)(Y−Xβ)+λβTβ=m1​(YTY−YTXβ−βTXTY+βTXTXβ)+λβTβ​(13)
将成本函数 C2(β)C_2(\beta)C2​(β) 对 β\betaβ 求导并取0,有
dC2dβ=2XTXβ−2XTY+2λIβ=0(14)\frac{\rm d C_2}{\rm d \beta}=2 X^{T} X \beta-2 X^{T} Y+2 \lambda I \beta=0 \tag{14} dβdC2​​=2XTXβ−2XTY+2λIβ=0(14)

(XTX+λI)β=XTY(15)\left(X^{T} X+\lambda I\right) \beta=X^{T} Y \tag{15} (XTX+λI)β=XTY(15)
解析解即为
β^=(XTX+λI)−1XTY(16)\hat \beta = (X^TX + \lambda I)^{-1}X^TY \tag{16} β^​=(XTX+λI)−1XTY(16)
这里,需要指出的是,矩阵 (XTX+λI)(X^TX + \lambda I)(XTX+λI) 一定可逆,这就避免了线性回归最优解 (10)(10)(10) 的潜在问题:XTXX^TXXTX 可能不可逆。下面给出证明。

Lemma1:\mathbf{Lemma \ 1:}Lemma 1: 对任意实矩阵 D∈Rm×nD \in \mathbb R^{m\times n}D∈Rm×n , DTDD^TDDTD 是半正定的。

Proof∗\mathbf{Proof^*}Proof∗ 任取实向量 x∈Rnx \in \mathbb R^nx∈Rn ,有 xT(DTD)x=(Dx)TDx=∣∣Dx∣∣22≥0x^T(D^TD)x = (Dx)^TDx = ||Dx||_2^2 \ge 0xT(DTD)x=(Dx)TDx=∣∣Dx∣∣22​≥0 .

Lemma2:\mathbf{Lemma \ 2:}Lemma 2: 如果矩阵 M∈Rn×nM \in \mathbb R^{n\times n}M∈Rn×n 是半正定的,则其特征值非负。

Lemma3:\mathbf{Lemma \ 3:}Lemma 3: 对于齐次线性方程 Ax=0Ax = 0Ax=0 ,若方程只有零解,则矩阵 AAA 可逆;如果方程有无穷解,则矩阵 AAA 不可逆。

Proof:\mathbf{Proof:}Proof:

构造以下方程组:
(XTX+λI)x=0(17)(X^TX + \lambda I) x = 0 \tag{17} (XTX+λI)x=0(17)
移项,可得
XTXx=−λx(18)X^TX x = -\lambda x \tag{18} XTXx=−λx(18)
根据特征向量的定义,可知 xxx 即为矩阵 XTXX^TXXTX 对应于特征值 −λ-\lambda−λ 的特征向量。又因为矩阵 XTXX^TXXTX 是半定的,上面的引理1、2指出其特征值非负;而 −λ<0-\lambda < 0−λ<0 ,故 x=0x = 0x=0 。

因此,方程组 (17)(17)(17) 仅有零解,由引理3可知矩阵 (XTX+λI)(X^TX + \lambda I)(XTX+λI) 可逆。Q.E.D.

编程实现

下面我们用Python来做简单实现。

首先使用sklearn.datasets.make_regression函数来生成我们的数据集。我们生成了1000个数据,自变量与因变量的个数均为1,真实截距设置为2,噪音系数设置为75。

最后将lasso回归、岭回归与线性回归放在一起作对比。

#-*- coding = UTF-8 -*-import numpy as np
import matplotlib.pyplot as pltfrom sklearn.datasets import make_regressionfrom sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.metrics import r2_score, mean_squared_errorx, y, coef = make_regression(n_samples=1000, n_features=1, n_targets=1, coef=True, bias=2, noise=75, shuffle=True, random_state=13)model = LinearRegression()
model_1 = Lasso(alpha=20, random_state=13)
model_2 = Ridge(alpha=20, random_state=13)model.fit(x, y)
model_1.fit(x, y)
model_2.fit(x, y)print('Linear Regression R^2:   {:.6f}', r2_score(model.predict(x), y))
print('LASSO Regression R^2:   {:.6f}', r2_score(model_1.predict(x), y))
print('Ridge Regression R^2:   {:.6f}', r2_score(model_2.predict(x), y))
print('\n\n')
print('Linear Regression MSE:   {:.6f}', mean_squared_error(model.predict(x), y))
print('LASSO Regression MSE:   {:.6f}', mean_squared_error(model_1.predict(x), y))
print('Ridge Regression MSE:   {:.6f}', mean_squared_error(model_2.predict(x), y))#print(model.coef_, model.intercept_)
#print(coef)plt.scatter(x, y, s=8)
ls = np.array([i/100-3 for i in range(0, 600)]).reshape(-1, 1)
plt.plot(ls, model.predict(ls), color='blue', label='Linear')
plt.plot(ls, model_1.predict(ls), color='red', label='LASSO')
plt.plot(ls, model_2.predict(ls), color='green', label='Ridge')
plt.legend()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-us8DPYvu-1589076125348)(/images/lasso回归与岭回归/image1.png)]

可以看到,岭回归与线性回归几乎重合,而LASSO回归则呈现出与它们不一样的结果。事实上,LASSO回归所使用的L1正则有着稀疏诱导的性质,虽然L1正则与L2正则均能够起到收缩系数的作用,但L1正则的收缩效果更强,它能使得系数收缩为0,而L2正则仅能使系数收缩至一个较小的数,不能收缩为0。因此,在有着多个输入变量时,LASSO回归能够起到变量选择的作用,将其中某些变量的系数收缩至0,即使得系数向量具有稀疏性。

总结与反思

下面我们提出几点思考。

  • lasso回归与岭回归中,均包含一个超参数 λ\lambdaλ ,这个超参数应该如何选择?
  • lasso回归如何高效求解?

lasso回归与岭回归相关推荐

  1. 线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例

    线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例 在线性回归类模型的训练过程中,模型通过数据拟合了目标变量y与特征变量X的关心,通过特征变量的线性组合来表征目标变量y; ...

  2. 线性回归——lasso回归和岭回归(ridge regression)

    目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...

  3. lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比

    1. 回顾最小二乘法 详细的解释在以下这个链接 https://www.matongxue.com/madocs/818 简而言之,最小二乘法展现了平方误差值最小的时候,就是最好的拟合回归线. 2. ...

  4. lasso回归和岭回归_如何计划新产品和服务机会的回归

    lasso回归和岭回归 Marketers sometimes have to be creative to offer customers something new without the lux ...

  5. 线性回归、lasso回归、岭回归以及弹性网络的系统解释

    线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...

  6. 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  7. 应用预测建模第六章线性回归习题6.1【主成分分析,模型的最优参数选择与模型对比 ,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  8. 应用预测建模第六章线性回归习题6.3【缺失值插补,分层抽样,预测变量重要性,重要预测变量如何影响响应变量,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  9. SparkML之回归(二)岭回归和Lasso阐述及OLS,梯度下降比较

    岭回归(RidgeRegression)它的上一级称之为Tikhonov regularization,是以Andrey Tikhonov命名的. Lasso(least absolute shrin ...

最新文章

  1. 知乎高赞:OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~
  2. emwin读取sd图片_262.3MB/S读取速率,雷克沙1667X这回谁还敢吐槽
  3. Jvm 系列(七):Jvm 调优-工具篇
  4. DOM 4.1 规范成为候选推荐标准陷困境,只因巨头齐反对
  5. 学成在线--1.CMS接口开发
  6. PyOpenGL之3D界面详解(一)
  7. android 免root 模拟器,真正免root的Droidwall详细使用教程
  8. 音视频开发(6)---nginx视频服务器
  9. 190521每日一句
  10. C语言实现24点游戏算法
  11. python for maya教程_Python for Maya Fundamentals
  12. 基于ROS的导航框架
  13. python制作折线图_python 生成折线图
  14. 随机森林 Iris 特征重要性
  15. git 删除历史commit
  16. Rman Crosscheck删除失效归档(转)
  17. npm包本地离线安装
  18. [Codewar练习-java]Snail Sort(蜗牛型排序)
  19. 射击游戏c语言源码,射击游戏 (C++代码)
  20. 互联网医疗以线下诊所为基地掀起共享医疗风潮

热门文章

  1. Android搜索匹配算法,智能拨号匹配算法(三)
  2. 大象新闻显示无法连接服务器,大象新闻登录不上去/注册不了/加载失败问题FAQ[多图]...
  3. 餐饮行业解决方案之采购战略制定与实施流程
  4. 使用EasyExce对excel进行读取
  5. 【kvm】更改内存大小
  6. 十六进制颜色码简单科普
  7. java中setLayout()方法
  8. 如何分分钟理解SVM(中文版)
  9. USB Type-C集线器ODM厂商连接美好生活
  10. 阿里云热修复sophix详解