lasso回归与岭回归
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⋮1x1(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=⎣⎢⎢⎢⎡y1y2⋮ym⎦⎥⎥⎥⎤,Y^=⎣⎢⎢⎢⎡y^1y^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^iY^=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(β)=m1i=1∑m(yi−y^i)2=m1i=1∑m(yi−x^iβ)2=m1∣∣Y−Xβ∣∣22(8)
对应最优的系数估计 β^\hat \betaβ^ 即为
β^=argminβJ(β)=argminβ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回归与岭回归相关推荐
- 线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例
线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例 在线性回归类模型的训练过程中,模型通过数据拟合了目标变量y与特征变量X的关心,通过特征变量的线性组合来表征目标变量y; ...
- 线性回归——lasso回归和岭回归(ridge regression)
目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...
- lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比
1. 回顾最小二乘法 详细的解释在以下这个链接 https://www.matongxue.com/madocs/818 简而言之,最小二乘法展现了平方误差值最小的时候,就是最好的拟合回归线. 2. ...
- lasso回归和岭回归_如何计划新产品和服务机会的回归
lasso回归和岭回归 Marketers sometimes have to be creative to offer customers something new without the lux ...
- 线性回归、lasso回归、岭回归以及弹性网络的系统解释
线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...
- 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
- 应用预测建模第六章线性回归习题6.1【主成分分析,模型的最优参数选择与模型对比 ,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
- 应用预测建模第六章线性回归习题6.3【缺失值插补,分层抽样,预测变量重要性,重要预测变量如何影响响应变量,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】
模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...
- SparkML之回归(二)岭回归和Lasso阐述及OLS,梯度下降比较
岭回归(RidgeRegression)它的上一级称之为Tikhonov regularization,是以Andrey Tikhonov命名的. Lasso(least absolute shrin ...
最新文章
- 知乎高赞:OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~
- emwin读取sd图片_262.3MB/S读取速率,雷克沙1667X这回谁还敢吐槽
- Jvm 系列(七):Jvm 调优-工具篇
- DOM 4.1 规范成为候选推荐标准陷困境,只因巨头齐反对
- 学成在线--1.CMS接口开发
- PyOpenGL之3D界面详解(一)
- android 免root 模拟器,真正免root的Droidwall详细使用教程
- 音视频开发(6)---nginx视频服务器
- 190521每日一句
- C语言实现24点游戏算法
- python for maya教程_Python for Maya Fundamentals
- 基于ROS的导航框架
- python制作折线图_python 生成折线图
- 随机森林 Iris 特征重要性
- git 删除历史commit
- Rman Crosscheck删除失效归档(转)
- npm包本地离线安装
- [Codewar练习-java]Snail Sort(蜗牛型排序)
- 射击游戏c语言源码,射击游戏 (C++代码)
- 互联网医疗以线下诊所为基地掀起共享医疗风潮