最小二乘法、岭回归Ridge算法和LASSO回归算法 背后的数学原理和详细公式推导
1机器学习中偏差和方差的均衡
偏差:当模型欠拟合时,就会出现较大的偏差。
方差:产生高方差的原因通常是由于模型过于复杂,即模型过拟合时,会出现较大的方差。
偏差和方差的关系:通常情况下,我们降低了偏差就会相应地使得方差提高,降低了方差就会相应地提高了偏差。所以我们总是希望找到一组最优的参数,这些参数能权衡模型的偏差和方差,使得模型性能达到最优。
2 什么是回归算法?
数理统计中的回归分析,是用来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
机器学习中的回归算法:它是监督型算法的一种,通过利用测试集数据来建立模型,再利用这个模型训练集中的数据进行处理的算法。目的是找到样本点方差最小的拟合曲线。
3 简单的二元一次曲线
若直线
y
=
f
(
x
)
=
a
x
+
b
y=f(x)=ax+b
y=f(x)=ax+b比如
y
=
2
x
−
5
和
y
=
−
3
x
+
1
y=2x-5和y=-3x+1
y=2x−5和y=−3x+1
其中,该2条曲线的a和b分别为2,-5 和-3,1;即知道a和b即可确定一条二元一次方程的曲线。这里的x可以作为数据的单属性。
同理,多属性的公式可以表示为:
y
=
a
1
x
1
+
a
2
x
2
+
.
.
.
.
+
a
n
x
n
y=a_{1}x_{1}+a_{2}x_{2}+....+a_{n}x_{n}
y=a1x1+a2x2+....+anxn
表示为矩阵形式为
Y
=
[
x
11
x
12
⋯
x
1
n
x
21
x
22
⋯
x
2
n
⋮
⋮
⋱
⋮
x
m
1
x
m
2
⋯
x
m
n
]
.
[
a
1
a
2
⋮
a
n
]
Y=\begin{bmatrix} x_{11}& x_{12}& \cdots & x_{1n}\\ x_{21}& x_{22}& \cdots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ x_{m1}& x_{m2}& \cdots & x_{mn} \end{bmatrix}.\begin{bmatrix} a_{1}\\ a_{2}\\ \vdots\\ a_{n} \end{bmatrix}
Y=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤.⎣⎢⎢⎢⎡a1a2⋮an⎦⎥⎥⎥⎤
其中:
[
x
11
x
12
⋯
x
1
n
x
21
x
22
⋯
x
2
n
⋮
⋮
⋱
⋮
x
m
1
x
m
2
⋯
x
m
n
]
=
X
\begin{bmatrix} x_{11}& x_{12}& \cdots & x_{1n}\\ x_{21}& x_{22}& \cdots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ x_{m1}& x_{m2}& \cdots & x_{mn} \end{bmatrix}=X
⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤=X
故而:
y
=
X
a
y=Xa
y=Xa
4 最小二乘法
4.1 原理
==本文出现的“a”,在很多地方也可以表示为“θ”=
如果对一堆离散点拟合出来的函数表达式为:
y
=
X
a
y=Xa
y=Xa这个函数不可能经过所有的离散点,必然会存在同一个x下,真实值与预测值之间存在误差。
4.2 如何衡量拟合的曲线效果?
4.3 公式推导
针对上述过程中存在的误差,进行误差平方和表示,能够达到曲线上方和曲线下方正负误差值抵消的效果。
F
(
a
)
=
min
α
∑
i
=
1
m
(
x
i
α
−
y
i
)
2
F(a)=\min \limits_{\alpha}\sum_{i=1}^{m}\left ( x_{i}\alpha - y_{i} \right )^{2}
F(a)=αmini=1∑m(xiα−yi)2
因为每一个xi和yi都对应一个数值,即:
F
(
a
)
=
(
x
1
a
−
y
1
)
2
+
(
x
2
a
−
y
2
)
2
+
⋯
+
(
x
n
a
−
y
n
)
2
F(a)=(x_{1}a-y_{1})^2+(x_{2}a-y_{2})^2+ \cdots +(x_{n}a-y_{n})^2
F(a)=(x1a−y1)2+(x2a−y2)2+⋯+(xna−yn)2
根据矩阵的乘法运算准则,上式可表示为矩阵形式:
F
(
a
)
=
(
[
x
11
x
12
⋯
x
1
n
x
21
x
22
⋯
x
2
n
⋮
⋮
⋱
⋮
x
m
1
x
m
2
⋯
x
m
n
]
.
[
a
1
a
2
⋮
a
n
]
−
[
y
1
y
2
⋮
y
n
]
)
2
=
(
X
a
−
Y
)
2
=
(
X
a
−
Y
)
T
(
X
a
−
Y
)
F(a)=(\begin{bmatrix} x_{11}& x_{12}& \cdots & x_{1n}\\ x_{21}& x_{22}& \cdots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ x_{m1}& x_{m2}& \cdots & x_{mn} \end{bmatrix}.\begin{bmatrix} a_{1}\\ a_{2}\\ \vdots\\ a_{n} \end{bmatrix}-\begin{bmatrix} y_{1}\\ y_{2}\\ \vdots\\ y_{n} \end{bmatrix})^{2}\\=\left( Xa-Y \right)^{2}=(Xa-Y)^{T}(Xa-Y)
F(a)=(⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤.⎣⎢⎢⎢⎡a1a2⋮an⎦⎥⎥⎥⎤−⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤)2=(Xa−Y)2=(Xa−Y)T(Xa−Y)
==========================================================
补充3个线性代数的运算性质:
(
a
b
)
T
=
b
T
a
T
(ab)^{T}=b^{T}a^{T}
(ab)T=bTaT
∂
x
T
a
∂
x
=
∂
a
T
x
∂
x
=
a
\frac{\partial x^{T}a}{\partial x}=\frac{\partial a^{T}x}{\partial x}=a
∂x∂xTa=∂x∂aTx=a
∂
x
T
a
x
∂
x
=
a
x
+
a
T
x
\frac{\partial x^{T}ax}{\partial x}=ax+a^{T}x\\
∂x∂xTax=ax+aTx
当矩阵x对称时:
∂
x
T
a
x
∂
x
=
2
a
x
\\ \frac{\partial x^{T}ax}{\partial x}=2ax
∂x∂xTax=2ax
F(a)可以展开为:
F
(
a
)
=
(
a
T
X
T
−
Y
T
)
(
X
a
−
Y
)
=
a
T
X
T
X
a
−
Y
T
X
a
−
a
T
X
T
Y
+
Y
T
Y
=
=
=
=
=
=
根
据
上
面
的
运
算
性
质
=
=
=
=
>
F
(
a
)
=
a
T
X
T
X
a
−
2
Y
T
X
a
+
Y
T
Y
F(a)=(a^{T}X^{T}-Y^{T})(Xa-Y) \\=a^{T}X^{T}Xa-Y^{T}Xa-a^{T}X^{T}Y+Y^{T}Y\\======根据上面的运算性质====>\\F(a)=a^{T}X^{T}Xa-2Y^{T}Xa+Y^{T}Y
F(a)=(aTXT−YT)(Xa−Y)=aTXTXa−YTXa−aTXTY+YTY======根据上面的运算性质====>F(a)=aTXTXa−2YTXa+YTY
该函数为一个凸函数,可以使用梯度为0的方法求得最优解:
即对F(a)求导令为0,可求得a:
F
(
a
)
′
=
2
X
T
X
a
−
2
X
T
Y
=
0
=
>
2
(
X
T
X
a
−
X
T
Y
)
=
0
=
>
a
=
2
(
X
T
X
)
−
1
X
(
T
)
Y
F(a)'=2X^{T}Xa-2X^{T}Y=0 \\ =>2(X^{T}Xa-X^{T}Y)=0\\ =>a=2(X^{T}X)^{-1}X^(T)Y
F(a)′=2XTXa−2XTY=0=>2(XTXa−XTY)=0=>a=2(XTX)−1X(T)Y
上述即为最小二乘法求参数a的最优解,参数解析式: a = 2 ( X T X ) − 1 X T Y a=2(X^{T}X)^{-1}X^{T}Y a=2(XTX)−1XTY
5 最小二乘法的局限性
最小二乘法求参数a的最优解,参数解析式:
a
=
2
(
X
T
X
)
−
1
X
T
Y
a=2(X^{T}X)^{-1}X^{T}Y
a=2(XTX)−1XTY
上述式子能成立的前提条件是:
(
X
T
X
)
≠
0
,
即
(
X
T
X
)
可
逆
(X^{T}X)≠0,即(X^{T}X)可逆
(XTX)=0,即(XTX)可逆
但是,普通最小二乘法带来的局限性,导致许多时候都不能直接使用其进行线性回归拟合,尤其是下面两种情况:
-数据集的列(特征)数量 > 数据量(行数量),即 X 不是列满秩。
-数据集列(特征)数据之间存在较强的线性相关性,即模型容易出现过拟合。
也就是说:
(
X
T
X
)
可
能
不
可
逆
,
则
∣
X
T
X
∣
=
0
(X^{T}X)可能不可逆,则|X^{T}X|=0
(XTX)可能不可逆,则∣XTX∣=0不可逆会导致运算错误,因为:
A
−
1
=
1
∣
A
∣
.
A
∗
,
A
∗
为
A
的
伴
随
矩
阵
若
A
=
X
T
X
,
则
:
(
X
T
X
)
−
1
=
1
∣
X
T
X
∣
.
(
X
T
X
)
∗
A^{-1}=\frac{1}{|A|}.A^{*},A^{*}为A的伴随矩阵\\若A=X^{T}X,则: \\(X^{T}X)^{-1}=\frac{1}{|X^{T}X|}.(X^{T}X)^{*}
A−1=∣A∣1.A∗,A∗为A的伴随矩阵若A=XTX,则:(XTX)−1=∣XTX∣1.(XTX)∗
由于分母不能为0,那么上述的推导过程则不成立,为了解决这个问题,提出了岭回归算法。
6 岭回归Ridge算法
6.1 原理
岭回归分析(RidgeRegression)是一种改良的最小二乘估计方法,也可以说岭回归就是在矩阵X^TX上加一个λI使得矩阵非奇异,进而能对XTX+λI求逆。
当线性回归过拟合时,权重系数wj就会非常的大,岭回归就是要解决这样的问题。岭回归(Ridge Regression)可以理解为在线性回归的损失函数的基础上,加,入一个L2正则项,来限制W不要过大。其中λ>0,通过确定λ的值可以使得模型在偏差和方差之间达到平衡,随着λ的增大,模型的方差减小,偏差增大。
也可以说岭回归就是在矩阵X^TX上加一个λI使得矩阵非奇异,进而能对XTX+λI求逆:
最小二乘法的损失函数为:
min
α
∑
i
=
1
m
(
x
i
α
−
y
i
)
2
\min \limits_{\alpha}\sum_{i=1}^{m}\left ( x_{i}\alpha - y_{i} \right )^{2}
αmini=1∑m(xiα−yi)2
为了使得推导式子的可行性,我们给它增加一个前提条件,使得:
(
X
T
X
)
可
逆
(X^{T}X)可逆
(XTX)可逆
在损失函数后面加上惩罚项,也叫L2正则项。
∑
i
=
1
m
λ
a
2
=
λ
∑
i
=
1
m
a
2
;
(
λ
>
0
)
\sum_{i=1}^{m}\lambda a^{2}=\lambda\sum_{i=1}^{m} a^{2};(\lambda>0)
i=1∑mλa2=λi=1∑ma2;(λ>0)
使用L2正则的线性回归模型称为Ridge回归(岭回归),加L2正则项的损失函数如下。:
F
(
a
)
=
min
α
∑
i
=
1
m
(
x
i
α
−
y
i
)
2
+
∑
i
=
1
m
λ
a
2
;
(
λ
>
0
)
F(a)=\min \limits_{\alpha}\sum_{i=1}^{m}\left ( x_{i}\alpha - y_{i} \right )^{2}+\sum_{i=1}^{m}\lambda a^{2};(\lambda>0)
F(a)=αmini=1∑m(xiα−yi)2+i=1∑mλa2;(λ>0)
对于λ,其值越大,对整个损失函数的惩罚就越大,换句话意思就是λ值越大,对α参数的变化就更加敏感。我们假设λ为10的时候,α²有0.1的变化,整理就会产生1的变化。如果λ为10000,α²有0.1的变化,整体就有1000的变化。
6.2 公式推导
根据上述函数的表达式,可以将它向量化,如目录4.3.
F
(
a
)
=
(
X
a
−
Y
)
T
(
X
a
−
Y
)
+
λ
a
2
=
a
T
X
T
X
a
−
2
Y
T
X
a
+
Y
T
Y
+
λ
a
T
a
F(a)=(Xa-Y)^{T}(Xa-Y)+\lambda a^{2}\\=a^{T}X^{T}Xa-2Y^{T}Xa+Y^{T}Y+\lambda a^{T}a
F(a)=(Xa−Y)T(Xa−Y)+λa2=aTXTXa−2YTXa+YTY+λaTa
岭回归的代价函数仍然是一个凸函数,因此可以利用梯度等于0的方式求得全局最优解(正规方程):
对F(a)求导,并令为0,则可求出a;
F
(
a
)
′
=
2
X
T
X
a
−
2
T
Y
+
2
λ
a
=
0
=
=
=
=
>
a
=
(
X
T
X
+
λ
I
)
−
1
X
T
Y
F(a)'=2X^{T}Xa-2^{T}Y+2\lambda a=0\\ ====>a=(X^{T}X+\lambda I)^{-1}X^{T}Y
F(a)′=2XTXa−2TY+2λa=0====>a=(XTX+λI)−1XTY
其中I 是单位矩阵,λ是岭系数,λI项使得新的矩阵对角线为λ,其余元素为0,
优势:
由于多了λI项的存在,使得原矩阵非奇异,即可逆。
6.3 Python中的岭回归Ridge拟合
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)
·alpha: 正则化强度,默认为 1.0,对应公式中的 λ。正则化强度; 必须是正浮点数。 正则化改善了问题的条件并减少了估计的方差。 较大的值指定较强的正则化。 Alpha对应于其他线性模型(如Logistic回归或LinearSVC)中的C^{-1}。 如果传递数组,则假定惩罚被特定于目标。 因此,它们必须在数量上对应。
·fit_intercept: 默认为 True,计算截距项。如果设置为false,则不会在计算中使用截距(例如,数据预期已经居中)。
·normalize: 默认为 False,不针对数据进行标准化处理。如果为真,则回归X将在回归之前被归一化。 当fit_intercept设置为False时,将忽略此参数。 当回归量归一化时,注意到这使得超参数学习更加鲁棒,并且几乎不依赖于样本的数量。 相同的属性对标准化数据无效。然而,如果你想标准化,请在调用normalize = False训练估计器之前,使用preprocessing.StandardScaler处理数据。
·copy_X: 默认为 True,即使用数据的副本进行操作,防止影响原数据。
·max_iter: 最大迭代次数,默认为 None。共轭梯度求解器的最大迭代次数。 对于’sparse_cg’和’lsqr’求解器,默认值由scipy.sparse.linalg确定。 对于’sag’求解器,默认值为1000。
·tol: 数据解算精度。
·solver: 根据数据类型自动选择求解器。{‘auto’,‘svd’,‘cholesky’,‘lsqr’,‘sparse_cg’,‘sag’}
·random_state: 随机数发生器。
7 LASSO算法与岭回归Ridge算法的联系和区别
Lasso回归和岭回归类似,区别就是在于惩罚函数上,Lasso可以理解为在线性回归基础上加入一个L1正则项,同样来限制W不要过大。其中λ>0,通过确定λ的值可以使得模型在偏差和方差之间达到平衡,随着λ的增大,模型的方差减小,偏差增大。
使用L2正则的线性回归模型称为Ridge回归(岭回归),加L2正则项的损失函数如下:
F
(
a
)
=
min
α
∑
i
=
1
m
(
x
i
α
−
y
i
)
2
+
∑
i
=
1
m
λ
a
2
;
(
λ
>
0
)
F(a)=\min \limits_{\alpha}\sum_{i=1}^{m}\left ( x_{i}\alpha - y_{i} \right )^{2}+\sum_{i=1}^{m}\lambda a^{2};(\lambda>0)
F(a)=αmini=1∑m(xiα−yi)2+i=1∑mλa2;(λ>0)
使用L1正则的线性回归模型称为LASSO回归(Least Absolute Shrinkage and
Selection Operator),加L1正则项的损失函数如下:
F
(
a
)
=
min
α
∑
i
=
1
m
(
x
i
α
−
y
i
)
2
+
∑
i
=
1
m
λ
∣
a
∣
;
(
λ
>
0
)
F(a)=\min \limits_{\alpha}\sum_{i=1}^{m}\left ( x_{i}\alpha - y_{i} \right )^{2}+\sum_{i=1}^{m}\lambda |a|;(\lambda>0)
F(a)=αmini=1∑m(xiα−yi)2+i=1∑mλ∣a∣;(λ>0)
7.1 L1和L2正则项的区别
L1:L1正则项的最大特点是能稀疏矩阵,进行庞大特征数量下的特征选择;
L2:L2正则项能够有效的防止模型过拟合,解决非满秩下求逆困难的问题。
7.2 Python中的LASSO回归拟合
sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
·alpha: 正则化强度,默认为 1.0。
·fit_intercept: 默认为 True,计算截距项。
·normalize: 默认为 False,不针对数据进行标准化处理。
·precompute: 是否使用预先计算的 Gram 矩阵来加速计算。
·copy_X: 默认为 True,即使用数据的副本进行操作,防止影响原数据。
·max_iter: 最大迭代次数,默认为 1000。
·tol: 数据解算精度。
·warm_start: 重用先前调用的解决方案以适合初始化。
·positive: 强制系数为正值。
·random_state: 随机数发生器。
·selection: 每次迭代都会更新一个随机系数。
8 总结
1 岭回归用的比lasso回归更多,很重要的一个原因就是计算方便,可以直接融入矩阵里面计算,用于减少过拟合,提高模型的泛化能力。lasso回归使得一些权值为0,相当于做特征选择;岭回归使得每个权值都比较小,这样才使得拟合曲线的导数变化范围比较小,曲线不至于太波折,限制了权值的波动范围,从而限制了函数的表达能力,所以有能力减小过拟合
2 对于病态方程(条件数比较大的矩阵,可以理解为矩阵中的一些值变化很小的情况下,会导致求得的解有很大的跳动),如果机器学习问题中,样本的小变化会导致权值非常大的变化,这是非常危险的。加入岭回归之后,会很明显地解决这个问题,使得求解更加稳定
3 如果是用迭代法求解,岭回归的二次方使函数的“凸”变为“强凸”,使求解更快速
参考链接:https://blog.csdn.net/gongxifacai_believe/article/details/104697401/
https://www.cnblogs.com/Belter/p/8536939.html