一.线性回归
- 线性回归形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型(nonlinear model)可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于线性回归的解𝜃直观表达了各属性在预测中的重要性,因此线性回归有很好的可解释性。
1.线性回归原理
线性回归遇到的问题一般是这样的。我们有𝑚个样本,每个样本对应于𝑛维特征和一个结果输出。
训练数据的形式:
(
x
1
(
0
)
,
x
2
(
0
)
,
.
.
.
x
n
(
0
)
,
y
0
)
,
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
x
n
(
1
)
,
y
1
)
,
.
.
.
(
x
1
(
m
)
,
x
2
(
m
)
,
.
.
.
x
n
(
m
)
,
y
n
)
(x_1^{(0)}, x_2^{(0)},...x_n^{(0)},y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1),...(x_1^{(m)}, x_2^{(m)},...x_n^{(m)},y_n)
(x1(0),x2(0),...xn(0),y0),(x1(1),x2(1),...xn(1),y1),...(x1(m),x2(m),...xn(m),yn)
我们主要做的是通过找到参数
(
θ
0
,
θ
1
,
.
.
.
θ
m
)
(\theta _0, \theta_1,...\theta_m)
(θ0,θ1,...θm),线性回归模型如下:
h
θ
,
(
x
1
,
x
2
,
.
.
.
x
n
)
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
h_\theta, (x_1, x_2, ...x_n) = \theta_0 + \theta_1x_1 + ... + \theta_nx_n
hθ,(x1,x2,...xn)=θ0+θ1x1+...+θnxn
矩阵化如下:
h
θ
(
X
)
=
X
θ
h_\theta(X) = X\theta
hθ(X)=Xθ
得到了模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:
J
(
θ
0
,
θ
1
,
.
.
.
θ
n
)
=
∑
i
=
0
m
(
h
θ
(
x
0
,
x
1
,
.
.
.
x
n
)
−
y
i
)
2
J(\theta_0,\theta_1,...\theta_n) = \sum _{i=0}^m (h_\theta (x_0, x_1, ... x_n) - y_i)^2
J(θ0,θ1,...θn)=i=0∑m(hθ(x0,x1,...xn)−yi)2
矩阵化如下:
J
(
θ
)
=
1
2
(
X
θ
−
Y
)
T
(
X
θ
−
Y
)
J(\theta) = \frac{1}{2}(X\theta - Y)^T(X\theta - Y)
J(θ)=21(Xθ−Y)T(Xθ−Y)
2.线性回归的算法
对于线性回归的损失函数 J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\theta) = \frac{1}{2}(X\theta - Y)^T(X\theta - Y) J(θ)=21(Xθ−Y)T(Xθ−Y), J ( θ ) ′ = X T ( X θ − Y ) J(\theta)'=X^T(X\theta -Y) J(θ)′=XT(Xθ−Y)我们常用的有两种方法来求损失函数最小化时候的θ参数:一种是梯度下降法,一种是最小二乘法。
- 如果采用梯度下降法,则𝜃的迭代公式是这样的:
θ = θ − α X T ( X θ − Y ) \theta = \theta - \alpha X^T(X\theta - Y) θ=θ−αXT(Xθ−Y)
其中 α \alpha α是学习率(步长), X T ( X θ − Y ) X^T(X\theta -Y) XT(Xθ−Y)是梯度
通过若干次迭代后,我们可以得到最终的𝜃的结果 - 如果采用最小二乘法,则
θ
\theta
θ的结果公式如下:
θ = ( X T X ) − 1 X T Y \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY
推导如下:
令 J ( θ ) ′ = 0 J(\theta)'=0 J(θ)′=0,即 X T ( X θ − Y ) X^T(X\theta -Y) XT(Xθ−Y)
所以 θ = ( X T X ) − 1 X T Y \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY
当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。
3.多项式线性回归
我们遇到的数据不一定都是线性的形式,如果是
y
=
x
1
2
+
x
2
2
y = x_1^2+x_2^2
y=x12+x22的模型,那线性回归很难拟合这个函数,这时候就需要用到多项式回归了。
回到我们开始的线性模型,
h
θ
,
(
x
1
,
x
2
,
.
.
.
x
n
)
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
h_\theta, (x_1, x_2, ...x_n) = \theta_0 + \theta_1x_1 +... + \theta_nx_n
hθ,(x1,x2,...xn)=θ0+θ1x1+...+θnxn,如果这里不仅仅是x的一次方,而是二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的2次多项式回归的模型:
h
θ
(
x
1
,
x
2
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
2
+
θ
4
x
2
2
+
θ
5
x
1
x
2
h_\theta(x_1, x_2) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2 + \theta_5x_1x_2
hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x12+θ4x22+θ5x1x2
我们令
x
0
=
1
,
x
1
=
x
1
,
x
2
=
x
2
,
x
3
=
x
1
2
,
x
4
=
x
2
2
,
x
5
=
x
1
x
2
x_0=1, x_1 = x_1, x_2 = x_2, x_3 = x_1^2, x_4 = x_2^2, x_5 = x_1x_2
x0=1,x1=x1,x2=x2,x3=x12,x4=x22,x5=x1x2,这样我们就得到下式:
h
θ
(
x
1
,
x
2
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
θ
4
x
4
+
θ
5
x
5
h_\theta(x_1, x_2) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + \theta_4x_4 + \theta_5x_5
hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x3+θ4x4+θ5x5
可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2),我们得到一个五元样本特征
(
1
,
x
1
,
x
2
,
x
1
2
,
x
2
2
,
x
1
,
x
2
)
(1, x_1, x_2, x_1^2, x_2^2, x_1, x_2)
(1,x1,x2,x12,x22,x1,x2),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归,但是达到了非线性拟合的效果。
二.岭回归
1.参数推导
线性回归模型的目标函数
J
(
β
)
=
∑
(
y
−
X
β
)
J(\beta) = \sum(y - X\beta)
J(β)=∑(y−Xβ)
为了保证回归系数
β
\beta
β可求,岭回归模型在目标函数上加了一个L2范数的惩罚项
J
(
β
)
=
∑
(
y
−
X
β
)
2
+
λ
∣
∣
β
∣
∣
2
=
∑
(
y
−
X
β
)
2
+
∑
λ
β
2
\begin{aligned} J(\beta) = \sum(y - X\beta)^2 + \lambda ||\beta||^2 \\ =\sum(y - X\beta)^2 + \sum\lambda\beta^2 \end{aligned}
J(β)=∑(y−Xβ)2+λ∣∣β∣∣2=∑(y−Xβ)2+∑λβ2
其中
λ
\lambda
λ为非负数,
λ
\lambda
λ越大,则为了使
J
(
β
)
J(\beta)
J(β)最小,回归系数
β
\beta
β就越小。
推导过程:
J
(
β
)
=
(
y
−
X
β
)
T
(
y
−
X
β
)
+
λ
β
T
β
=
y
T
y
−
y
T
X
β
−
β
T
X
T
y
+
β
T
X
T
X
β
+
λ
β
T
β
\begin{aligned} J(\beta) &= (y - X\beta)^T(y - X\beta)+\lambda\beta^T\beta \\ &=y^Ty-y^TX\beta-\beta^TX^Ty + \beta^TX^TX\beta + \lambda\beta^T\beta \end{aligned}
J(β)=(y−Xβ)T(y−Xβ)+λβTβ=yTy−yTXβ−βTXTy+βTXTXβ+λβTβ
令 ∂ J ( β ) ∂ β = 0 令\frac{\partial J(\beta)}{\partial \beta} = 0 令∂β∂J(β)=0
⇒ 0 − X T y − X T y + 2 X T X β + 2 λ β = 0 \Rightarrow0-X^Ty-X^Ty + 2X^TX\beta + 2\lambda\beta = 0 ⇒0−XTy−XTy+2XTXβ+2λβ=0
⇒
β
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
\Rightarrow \beta = (X^TX+\lambda I)^{-1}X^Ty
⇒β=(XTX+λI)−1XTy
L2范数惩罚项的加入使得
(
X
T
X
+
λ
I
)
(X^TX+\lambda I)
(XTX+λI)满秩,保证了可逆,但是也由于惩罚项的加入,使得回归系数
β
\beta
β的估计不再是无偏估计。所以岭回归是以放弃无偏性、降低精度为代价解决病态矩阵问题的回归方法。
单位矩阵
I
I
I的对角线上全是1,像一条山岭一样,这也是岭回归名称的由来。
2.λ的选择
- 模型的方差:回归系数的方差
- 模型的偏差:预测值和真实值的差异
随着模型复杂度的提升,在训练集上的效果就越好,即模型的偏差就越小;但是同时模型的方差就越大。对于岭回归的 λ \lambda λ而言,随着 λ \lambda λ的增大, ∣ X T X + λ I ∣ |X^TX+\lambda I| ∣XTX+λI∣就越大, ( X T X + λ I ) − 1 (X^TX+\lambda I)^{-1} (XTX+λI)−1就越小,模型的方差就越小;而 λ \lambda λ越大使得 β \beta β的估计值更加偏离真实值,模型的偏差就越大。所以岭回归的关键是找到一个合理的 λ \lambda λ值来平衡模型的方差和偏差。
根据凸优化,可以将岭回归模型的目标函数 J ( β ) J(\beta) J(β)最小化问题等价于
f ( x ) = { a r g m i n { ∑ ( y − X β 2 ) } ∑ β 2 ≤ t f(x)= \begin{cases} argmin\{\sum(y - X\beta^2)\}\\ \sum\beta^2\leq t \end{cases} f(x)={argmin{∑(y−Xβ2)}∑β2≤t
其中t为一个常数。以最简单的二维为例,即 β ( β 1 , β 2 ) \beta(\beta_1, \beta_2) β(β1,β2)其几何图形是
抛物面代表的是 ∑ ( y − X β ) 2 \sum(y-X\beta)^2 ∑(y−Xβ)2的部分,圆柱体代表的是 β 1 2 + β 2 2 ≤ t \beta_1^2+\beta_2^2\leq t β12+β22≤t的部分。最小二乘解是抛物面的中心,岭回归解是抛物面与圆柱体的交点。岭回归的惩罚项 ∑ λ β 2 \sum\lambda\beta^2 ∑λβ2是关于回归系数 β \beta β的二次函数,对目标函数求偏导时会保留 β \beta β,抛物面与圆柱体很难相交于轴上使某个变量的回归系数为0,因此岭回归不能实现变量的剔除。
(1) 岭迹法确定λ值
由
β
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
\beta=(X^TX+\lambda I)^{-1}X^Ty
β=(XTX+λI)−1XTy可知
β
\beta
β是
λ
\lambda
λ的函数,当
λ
∈
[
0
,
∞
)
\lambda \in [0,\infty)
λ∈[0,∞)时,在平面直角坐标系中的
β
−
λ
\beta-\lambda
β−λ曲线称为岭迹曲线。当
β
\beta
β趋于稳定的点就是所要寻找的
λ
\lambda
λ值。
(2)交叉验证法确定λ\lambdaλ值
交叉验证法的思想是,将数据集拆分为k个数据组(每组样本量大体相当),从k组中挑选k-1组用于模型的训练,剩下的1组用于模型的测试,则会有k-1个训练集和测试集配对,每一种训练集和测试集下都会有对应的一个模型及模型评分(如均方误差),进而可以得到一个平均评分。对于
λ
\lambda
λ值则选择平均评分最优的
λ
\lambda
λ值。
三.LASSO回归
1.参数推导
岭回归无法剔除变量,而LASSO回归模型,将惩罚项由L2范数变为L1范数,可以将一些不重要的回归系数缩减为0,达到剔除变量的目的。
J
(
β
)
=
∑
(
y
−
X
β
)
2
+
λ
∣
∣
β
∣
∣
1
=
∑
(
y
−
X
β
)
2
+
∑
λ
∣
β
∣
=
E
S
S
(
β
)
+
λ
l
1
(
β
)
\begin{aligned} J(\beta)&=\sum(y-X\beta)^2+\lambda||\beta||_1 \\ &=\sum(y-X\beta)^2+\sum\lambda|\beta| \\ &=ESS(\beta)+\lambda l_1(\beta) \end{aligned}
J(β)=∑(y−Xβ)2+λ∣∣β∣∣1=∑(y−Xβ)2+∑λ∣β∣=ESS(β)+λl1(β)
其中
E
S
S
(
β
)
ESS(\beta)
ESS(β)表示误差平方和,
λ
l
1
(
β
)
\lambda l_1(\beta)
λl1(β)表示惩罚项。由于惩罚项变成了绝对值,则在零点处就不可导,故采用坐标下降法(对于p维参数的可微凸函数
J
(
β
)
J(\beta)
J(β),如果存在
β
^
\hat\beta
β^使得
J
(
β
)
J(\beta)
J(β)在每个坐标轴上均达到最小值,则
J
(
β
^
)
J(\hat{\beta})
J(β^) 就是点
β
^
\hat\beta
β^上的全局最小值),控制其他p-1个参数不变,对目标函数中的某一个
β
j
\beta_j
βj求偏导,以此类推对剩下的p-1个参数求偏导,最终令每个分量下的导函数为0,得到使目标函数达到全局最小的
β
^
\hat\beta
β^
E
S
S
(
β
)
=
∑
i
=
1
n
(
y
i
−
∑
j
=
1
n
β
x
i
j
)
2
=
∑
i
=
1
n
(
y
i
2
+
(
∑
j
=
1
p
β
j
x
i
j
)
2
−
2
y
i
(
∑
j
=
1
p
β
j
x
i
j
)
)
\begin{aligned} ESS(\beta)&=\sum_{i = 1}^{n}(y_i-\sum _{j=1}^{n}\beta x_{ij})^2\\ &=\sum _{i=1}^n(y_i^2+(\sum_{j=1}^p\beta_jx_{ij})^2-2y_i(\sum_{j=1}^p\beta_jx_{ij})) \end{aligned}
ESS(β)=i=1∑n(yi−j=1∑nβxij)2=i=1∑n(yi2+(j=1∑pβjxij)2−2yi(j=1∑pβjxij))
⟹ ∂ E S S ( β ) ∂ β j = − 2 ∑ i − 1 n x i j ( y i − ∑ j = 1 p β j x i j ) = − 2 ∑ i − 1 n x i j ( y i − ∑ k = j β k x i k − β j x i j ) = − 2 ∑ i − 1 n x i j ( y i − ∑ k = j β k x i k ) + 2 β j ∑ i = 1 n x i j 2 = − 2 m j + 2 β j n j \begin{aligned} \Longrightarrow\frac{\partial ESS(\beta)}{\partial \beta_j}&=-2\sum_{i-1}^nx_{ij}(y_i-\sum^{p}_{j=1}\beta_jx_{ij})\\ &=-2\sum_{i-1}^nx_{ij}(y_i-\sum_{k=j}\beta_kx_{ik}-\beta_jx_{ij})\\ &=-2\sum_{i-1}^nx_{ij}(y_i-\sum_{k=j}\beta_kx_{ik})+2\beta_j\sum_{i=1}^n x_{ij}^2\\ &=-2m_j+2\beta_jn_j \end{aligned} ⟹∂βj∂ESS(β)=−2i−1∑nxij(yi−j=1∑pβjxij)=−2i−1∑nxij(yi−k=j∑βkxik−βjxij)=−2i−1∑nxij(yi−k=j∑βkxik)+2βji=1∑nxij2=−2mj+2βjnj
其中
m
j
=
∑
i
−
1
n
x
i
j
(
y
i
−
∑
k
=
j
β
k
x
i
k
)
,
n
j
=
∑
i
=
1
n
x
i
j
2
m_j=\sum_{i-1}^nx_{ij}(y_i-\sum_{k=j}\beta_kx_{ik}),n_j=\sum_{i=1}^nx_{ij}^2
mj=∑i−1nxij(yi−∑k=jβkxik),nj=∑i=1nxij2
惩罚项不可导,则使用次导数:
∂
λ
l
1
(
β
)
∂
β
j
=
{
λ
,
当
β
j
>
0
[
−
λ
,
λ
]
,
当
β
j
=
0
−
λ
,
当
β
j
<
0
\frac{\partial \lambda l_1(\beta)}{\partial \beta_j}= \begin{cases} \lambda,&当\beta_j>0\\ [-\lambda,\lambda], &当\beta_j=0\\ -\lambda, &当\beta_j<0 \end{cases}
∂βj∂λl1(β)=⎩⎪⎨⎪⎧λ,[−λ,λ],−λ,当βj>0当βj=0当βj<0
于是令两个偏导数相加等于0
∂
E
S
S
(
β
)
∂
β
j
+
∂
λ
l
1
(
β
)
∂
β
j
=
{
−
2
m
j
+
2
β
j
n
j
+
λ
=
0
[
−
2
m
j
−
λ
,
−
2
m
j
+
λ
]
=
0
−
2
m
j
+
2
β
j
n
j
−
λ
=
0
⟹
β
j
=
{
(
m
j
−
λ
2
)
/
n
j
,
当
m
j
>
λ
2
0
,
当
m
j
∈
[
−
λ
2
,
λ
2
]
(
m
j
+
λ
2
)
/
n
j
,
当
m
j
<
λ
2
\frac{\partial ESS(\beta)}{\partial \beta_j} + \frac{\partial \lambda l_1(\beta)}{\partial \beta_j} = \begin{cases} -2m_j+2\beta_jn_j+\lambda=0\\ [-2m_j-\lambda,-2m_j+\lambda]=0\\ -2m_j+2\beta_jn_j-\lambda=0 \end{cases}\\ \Longrightarrow\beta_j = \begin{cases} (m_j-\frac{\lambda}{2})/n_j,&当m_j>\frac{\lambda}{2}\\ 0, &当m_j\in[-\frac{\lambda}{2},\frac{\lambda}{2}]\\ (m_j+\frac{\lambda}{2})/n_j,&当m_j<\frac{\lambda}{2} \end{cases}
∂βj∂ESS(β)+∂βj∂λl1(β)=⎩⎪⎨⎪⎧−2mj+2βjnj+λ=0[−2mj−λ,−2mj+λ]=0−2mj+2βjnj−λ=0⟹βj=⎩⎪⎨⎪⎧(mj−2λ)/nj,0,(mj+2λ)/nj,当mj>2λ当mj∈[−2λ,2λ]当mj<2λ
2. λ \lambda λ的选择
直接使用交叉验证法