赞
踩
岭回归是在线性回归的代价函数上增加L2范数,是为了解决线性归回中自变量相关性太高导致的多重共线性问题。
标准线性回归的代价函数的解析解 w 为:
w
=
(
X
T
X
)
−
1
X
T
y
w=(X ^T X) ^{−1} X ^T y
w=(XTX)−1XTy
其中提到如果矩阵 X 的转置与矩阵 X 相乘后的矩阵不是满秩矩阵时,这个矩阵是不可逆的,还提到其本质是多个自变量 x 之间存在多重共线性。下面来介绍多重共线性的问题与解决这个问题的其中一个方法 - 岭回归1(Ridge Regression)
先来看看多重共线性在维基百科中的解释:
多重共线性2(Multicollinearity)是指多变量线性回归中,变量之间由于存在精确相关关系或高度相关关系而使回归估计不准确。
那么什么是精确相关关系与高度相关关系呢?假如有下面的(1)式,其中
w
1
=
2
,
w
2
=
3
w_1=2,w_2=3
w1=2,w2=3,同时如果又存在(2)式的关系,这时就说明
x
1
与
x
2
x_1与x_2
x1与x2存在精确相关关系。当
x
1
与
x
2
x_1与x_2
x1与x2之间存在近似精确相关关系,例如
x
1
x_1
x1约等于 2 倍的
x
2
x_2
x2,则说明存在高度相关关系。
D
(
x
)
=
{
y
=
2
x
1
+
3
x
2
,
(
1
)
x
2
=
2
x
1
,
(
2
)
D(x) =
因为由(2)式可以将(1)式改写成不同的形式,这样就会导致 w 存在无数种解,会使得最后的回归估计不准确。
根据 w 的解析解,可以通过下面的公式来求解其中的逆矩阵运算,被除数为矩阵的伴随矩阵,除数为矩阵的行列式。可以看到矩阵可逆的条件是其行列式不能为零。
( X T X ) − 1 = ( X T X ) ∗ ∣ X T X ∣ {(X^TX)}^{-1} = \frac{(X^TX)^*}{|X^TX|} (XTX)−1=∣XTX∣(XTX)∗
如果自变量之间存在多重共线性,会使得矩阵的行列式为零,导致矩阵不可逆。如下图中的示例 X,可以看到 x 1 与 x 2 x_1与x_2 x1与x2存在精确相关关系,相乘后的矩阵经过初等变换4后其行列式为零,说明相乘后的矩阵的行列式也必然为零(初等变换不改变行列式为零的判断),这时的矩阵不可逆。如果自变量之间是高度相关关系,会使得矩阵的行列式近似等于零,这时所得的 w 的偏差会很大,也会造成回归估计不准确。
多重共线性的问题既然是自变量之间存在相关关系,其中一个解决方法就是剔除掉共线的自变量,可以通过计算方差扩大因子5(Variance inflation factor,VIF)来量化自变量之间的相关关系,方差扩大因子越大说明自变量的共线性越严重。
另一种方式是通过对代价函数正则化加入惩罚项来解决,其中一种正则化方式被称为吉洪诺夫正则化(Tikhonov regularization),这种代价函数正则化后的线性回归被称为岭回归(Ridge Regression)。
岭回归的代价函数第一项与标准线性回归的一致,都是欧几里得距离的平方和,只是在后面加上了一个 w 向量的 L2-范数6 的平方作为惩罚项(L2-范数的含义为向量 W 每个元素的平方和然后开平方),其中 λ 表示惩罚项的系数,人为的控制惩罚项的大小。由于正则项是 L2-范数,有时这种正则化方式也被称为 L2 正则化。
Cost
(
w
)
=
∑
i
=
1
N
(
y
i
−
w
T
x
i
)
2
+
λ
∥
w
∥
2
2
\operatorname{Cost}(\mathrm{w})=\sum_{\mathrm{i}=1}^{\mathrm{N}}\left(\mathrm{y}_{\mathrm{i}}-\mathrm{w}^{\mathrm{T}} \mathrm{x}_{\mathrm{i}}\right)^{2}+\lambda\|\mathrm{w}\|_{2}^{2}
Cost(w)=i=1∑N(yi−wTxi)2+λ∥w∥22
代价函数通过求导直接得到 w 的解析解,其中 X 为 N x M 矩阵,y 为 N 维列向量, λ 属于实数集,I 为 M x M 的单位矩阵。
w
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
λ
∈
R
\mathrm{w}=\left(\mathrm{X}^{\mathrm{T}}\mathrm{X}+\lambda\mathrm{I}\right)^{-1}\mathrm{X}^\mathrm{T}\mathrm{y}\quad\lambda\in\mathbb{R}
w=(XTX+λI)−1XTyλ∈R
X
=
[
x
1
T
x
1
T
x
2
T
⋮
x
N
T
]
=
[
X
11
X
12
⋯
X
11
X
21
X
22
⋯
X
21
⋮
⋮
⋱
⋮
X
N
1
X
N
2
⋯
X
N
M
]
y
=
(
y
1
y
2
⋮
y
N
)
X=\left[
__________________________________________________________________________
可以看到岭回归代价函数的解析解相较于标准线性回归来说多了一个可以人为控制的对角矩阵,这时可以通过调整不同的 λ 来使得括号内的矩阵可逆。
import numpy as np
def ridge(X, y, lambdas=0.1):
"""
岭回归
args:
X - 训练数据集
y - 目标标签值
lambdas - 惩罚项系数
return:
w - 权重系数
"""
return np.linalg.inv(X.T.dot(X) + lambdas * np.eye(X.shape[1])).dot(X.T).dot(y)
from sklearn.linear_model import Ridge
# 初始化岭回归器
reg = Ridge(alpha=0.1, fit_intercept=False)
# 拟合线性模型
reg.fit(X, y)
# 权重系数
w = reg.coef_
下图展示了惩罚系数 λ 对各个自变量的权重系数的影响,横轴为惩罚系数 λ ,纵轴为权重系数,每一个颜色表示一个自变量的权重系数:
可以看到当 λ 越大时( λ 向左移动),惩罚项占据主导地位,会使得每个自变量的权重系数趋近于零,而当 λ 越小时( λ 向右移动),惩罚项的影响越来越小,会导致每个自变量的权重系数震荡的幅度变大。在实际应用中需要多次调整不同的 λ 值来找到一个合适的模型使得最后的效果最好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。