机器学习之线性回归原理
机器学习之线性回归原理
1 线性回归简介
在机器学习中,线性回归可解释为求解连续变量与因变量之间的线性关系的数学表达式。假设该数据集总共有
m
m
m列特征,
n
n
n个数据,那么其形式为:
h
w
(
x
1
,
x
2
.
.
.
x
m
)
=
w
0
+
w
1
x
1
+
w
2
x
2
+
.
.
.
w
m
x
m
h_w(x_1,x_2...x_m) = w_0+w_1x_1+w_2x_2+...w_mx_m
hw(x1,x2...xm)=w0+w1x1+w2x2+...wmxm
矩阵表达形式为
H
W
(
X
)
=
X
W
H_W(X) = XW
HW(X)=XW
这里偏置值 b b b为 w 0 w_0 w0,并且在矩阵形式中对在矩阵X左边添加了一列1,做了简化,方便推导
其中的模型参数序列 { w 0 , w 1 , . . . w m w_0,w_1,...w_m w0,w1,...wm} ,则是我们求解的重点。那么到底如何求解它们呢,主流的两种方法为标准方程法或梯度下降法。
2 损失函数
在具体了解两种方法,标准方程法与梯度下降法之前先介绍一下衡量线性回归模型好坏的损失函数。线性回归中使用的形式为均方差误差(MSE),假设数据集有m个特征,n个样本,那么其形式为:
J
(
w
0
,
w
1
,
.
.
.
w
m
)
=
∑
i
=
1
n
(
h
x
i
(
w
0
,
w
1
,
.
.
.
w
m
)
−
y
i
)
2
J(w_0,w_1,...w_m) = \sum_{i=1}^n\ (h_{x^i}(w_0,w_1,...w_m) - y_i)^2
J(w0,w1,...wm)=i=1∑n (hxi(w0,w1,...wm)−yi)2
其矩阵表达形式为 J ( W ) = ( X W − Y ) T ( X W − Y ) J(W)=(XW−Y)^T(XW−Y) J(W)=(XW−Y)T(XW−Y)
其实如果是均方差误差,上面两个公式右边都要左乘 1 n \cfrac{1}{n} n1,但是为了推导方便,并没有加上,实际影响也不大
另外线性回归的损失函数是凸函数,加上正则项(Norm)后仍是凸函数,这也是为什么不管用什么方法都能对线性回归求解到全局最优解。(不了解凸函数可以查找其他资料,实际内容也是比较简单的)
3 两种求解方法
求解参数序列{ w 0 , w 1 , . . . w m w_0,w_1,...w_m w0,w1,...wm}的准则就是使得我们将数据集带入损失函数,损失函数的值最小。
① 标准方程法
标准方程法的推导是基于矩阵表达形式的,因为我们要求解
J
(
W
)
J(W)
J(W) 的最小值,由于
(
X
W
−
Y
)
T
(
X
W
−
Y
)
(XW−Y)^T(XW−Y)
(XW−Y)T(XW−Y) 是一个半正定二次型,那么当取得最小值时,其一阶微分为零矩阵,也是类似于求解二次函数的最小值。
推导过程如下:
∂
(
X
W
−
Y
)
T
(
X
W
−
Y
)
∂
W
=
0
\frac{\partial (XW−Y)^T(XW−Y)}{\partial W} = 0
∂W∂(XW−Y)T(XW−Y)=0
∂
(
W
T
X
T
X
W
−
W
T
X
T
Y
−
Y
T
X
W
+
Y
T
Y
)
∂
W
=
0
\frac{\partial (W^TX^TXW- W^TX^TY-Y^TXW+Y^TY)}{\partial W} = 0
∂W∂(WTXTXW−WTXTY−YTXW+YTY)=0
2
X
T
X
W
−
X
T
Y
−
X
T
Y
+
0
=
0
2X^TXW-X^TY-X^TY+0=0
2XTXW−XTY−XTY+0=0
最后将
W
W
W提取出来就是:
W
=
(
X
T
X
)
−
1
X
T
Y
W = (X^TX)^{-1}X^TY
W=(XTX)−1XTY
在这里要提一下半正定矩阵 X T X X^TX XTX不可逆的情况:
1. 部分特征值之间存在线性相关性
2. 样本数小于特征数
解决
X
T
X
X^TX
XTX不可逆的方法,加上正则项
λ
I
\lambda I
λI(
λ
>
0
且为常数
\lambda>0且为常数
λ>0且为常数),而后变为:
W
=
(
X
T
X
+
λ
I
)
−
1
X
T
Y
W = (X^TX+\lambda I)^{-1}X^TY
W=(XTX+λI)−1XTY
改变后的矩阵
(
X
T
X
+
λ
I
)
(X^TX+\lambda I)
(XTX+λI)的奇异值均大于0,因此必定可逆。
② 梯度下降法
针对梯度下降法求解参数,表明为对参数序列 {
w
0
,
w
1
,
.
.
.
w
m
w_0,w_1,...w_m
w0,w1,...wm} 的所有参数进行同步更新,并且普通的梯度下降法每次更新都使用数据集中的所有数据。对于
t
t
t 时刻的参数
w
j
w_j
wj,设置学习率为
α
\alpha
α (
α
\alpha
α>0且为常数),那么就有如下推导:
w
j
t
=
w
j
t
−
1
−
α
∗
∂
J
(
w
0
,
w
1
,
.
.
.
w
m
)
∂
w
i
w_j^t = w_j^{t-1} -\alpha* \frac{\partial J(w_0,w_1,...w_m)}{\partial w_i}
wjt=wjt−1−α∗∂wi∂J(w0,w1,...wm)
展开损失函数
J
(
w
0
,
w
1
,
.
.
.
w
m
)
J(w_0,w_1,...w_m)
J(w0,w1,...wm) 就是
w
j
t
=
w
j
t
−
1
−
α
∗
∂
∑
i
=
1
n
(
w
0
+
w
1
x
1
i
+
w
2
x
2
i
+
.
.
.
w
m
x
m
i
−
y
i
)
2
∂
w
i
w_j^t = w_j^{t-1} -\alpha* \frac{\partial \sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)^2}{\partial w_i}
wjt=wjt−1−α∗∂wi∂∑i=1n(w0+w1x1i+w2x2i+...wmxmi−yi)2
现在直接对
w
j
w_j
wj 求出偏导后的结果,就是
w
j
t
=
w
j
t
−
1
−
α
∗
2
∗
∑
i
=
1
n
(
w
0
+
w
1
x
1
i
+
w
2
x
2
i
+
.
.
.
w
m
x
m
i
−
y
i
)
∗
x
j
i
w_j^t = w_j^{t-1} -\alpha*2*\sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)*x_j^i
wjt=wjt−1−α∗2∗i=1∑n(w0+w1x1i+w2x2i+...wmxmi−yi)∗xji
此处的 j j j 与 i i i 反映不同的含义, j j j 反映的是对应参数 w j w_j wj, i i i 反映对应哪一个样本,并且这里我省略了对于参数 w 0 w_0 w0 的 x 0 i x_0^i x0i, 它们的值都默认为1,作为偏置值
那么对于所有的参数 {
w
0
,
w
1
,
.
.
.
w
m
w_0,w_1,...w_m
w0,w1,...wm} 就可以列举
m
+
1
m+1
m+1列:
w
0
t
=
w
0
t
−
1
−
α
∗
2
∗
∑
i
=
1
n
(
w
0
+
w
1
x
1
i
+
w
2
x
2
i
+
.
.
.
w
m
x
m
i
−
y
i
)
∗
1
w_0^t = w_0^{t-1} -\alpha*2*\sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)*1
w0t=w0t−1−α∗2∗∑i=1n(w0+w1x1i+w2x2i+...wmxmi−yi)∗1
w
1
t
=
w
1
t
−
1
−
α
∗
2
∗
∑
i
=
1
n
(
w
0
+
w
1
x
1
i
+
w
2
x
2
i
+
.
.
.
w
m
x
m
i
−
y
i
)
∗
x
1
i
w_1^t = w_1^{t-1} -\alpha*2*\sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)*x_1^i
w1t=w1t−1−α∗2∗∑i=1n(w0+w1x1i+w2x2i+...wmxmi−yi)∗x1i
…
w
m
t
=
w
m
t
−
1
−
α
∗
2
∗
∑
i
=
1
n
(
w
0
+
w
1
x
1
i
+
w
2
x
2
i
+
.
.
.
w
m
x
m
i
−
y
i
)
∗
x
m
i
w_m^t = w_m^{t-1} -\alpha*2*\sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)*x_m^i
wmt=wmt−1−α∗2∗∑i=1n(w0+w1x1i+w2x2i+...wmxmi−yi)∗xmi
可以看到式子中的 ∑ i = 1 n ( w 0 + w 1 x 1 i + w 2 x 2 i + . . . w m x m i − y i ) ∗ x j i \sum_{i=1}^n (w_0+w_1x_1^i+w_2x_2^i+...w_mx_m^i-y_i)*x_j^i ∑i=1n(w0+w1x1i+w2x2i+...wmxmi−yi)∗xji,
其实就是对单个数据求直接误差然后乘以我们对应 w j w_j wj 的 x j i x_j^i xji,最后求和。
下面展示一下梯度下降法的矩阵形式,看起来会简便很多:
W
∗
=
W
−
α
∂
(
X
W
−
Y
)
T
(
X
W
−
Y
)
∂
W
W^{*} = W-\alpha \frac{\partial (XW−Y)^T(XW−Y)}{\partial W}
W∗=W−α∂W∂(XW−Y)T(XW−Y)
根据上面标准方程法推导的
∂
(
X
W
−
Y
)
T
(
X
W
−
Y
)
∂
W
=
2
X
T
X
W
−
X
T
Y
−
X
T
Y
\frac{\partial (XW−Y)^T(XW−Y)}{\partial W}=2X^TXW-X^TY-X^TY
∂W∂(XW−Y)T(XW−Y)=2XTXW−XTY−XTY
直接带入梯度下降法的矩阵形式中我们可以得到
W
∗
=
W
−
2
α
X
T
(
X
W
−
Y
)
W^{*} = W-2\alpha X^T(XW-Y)
W∗=W−2αXT(XW−Y)
③ 求解方法的选择
考虑选择哪一种作为线性回归的求解方法一般只需要考虑特征的数量情况。标准方程法由于需要求解 ( X T X ) {(X^TX)} (XTX)的逆矩阵。假设特征数量为 m m m,半正定矩阵的形状就为 m × m m\times m m×m (准确来说是 ( m + 1 ) × ( m + 1 ) (m+1) \times (m+1) (m+1)×(m+1),因为有将偏置值 b b b,也等同视为了特征放入矩阵中计算) ,此时使用 numpy 求解逆矩阵的时间复杂度约为 O ( m 3 ) O(m^3) O(m3)。
谈及时间复杂度是为了说明当特征数量十分多时,计算逆矩阵的时间非常漫长。那么这时候就选择梯度下降法就比较合适,后者对特征数量没什么限制。
一般说特征非常多时不合适使用标准方程法,那么到底是多少呢。其实只要特征数量不到几万至几十万,都是适用的。
大多数情况下挑自己顺手的选择。如果你对神经网络十分熟悉,在使用梯度下降法调节学习率与正则项参数时自然也是得心应手。
4 正则化减轻过拟合
在线性回归中,模型可能会出现过拟合,正则化则是在损失函数中增加有关模型参数 w w w 的一项,从而限制模型复杂度,达到减轻过拟合的效果。基本的有三种正则化,算法分别为Lasso(L1正则),Ridge(L2正则),Elastic-net(L1与L2结合)。
① Lasso(L1正则)
只需要在损失函数后面加上参数序列的绝对值的和的项,此时损失函数为:
J
(
w
0
,
w
1
,
.
.
.
w
m
)
=
∑
i
=
1
n
(
h
x
i
(
w
0
,
w
1
,
.
.
.
w
m
)
−
y
i
)
2
+
λ
∑
j
=
1
m
∣
w
j
∣
J(w_0,w_1,...w_m) = \sum_{i=1}^n\ (h_{x^i}(w_0,w_1,...w_m) - y_i)^2 +\lambda \sum_{j=1}^m|w_j|
J(w0,w1,...wm)=i=1∑n (hxi(w0,w1,...wm)−yi)2+λj=1∑m∣wj∣
矩阵形式为 J ( W ) = ( X W − Y ) T ( X W − Y ) + λ ∣ ∣ W ∣ ∣ 1 J(W)=(XW−Y)^T(XW−Y)+\lambda ||W||_1 J(W)=(XW−Y)T(XW−Y)+λ∣∣W∣∣1
② Ridge(L2正则)
在损失函数后加上参数序列的平方和的项,此时损失函数为:
J
(
w
0
,
w
1
,
.
.
.
w
m
)
=
∑
i
=
1
n
(
h
x
i
(
w
0
,
w
1
,
.
.
.
w
m
)
−
y
i
)
2
+
λ
∑
j
=
1
m
w
j
2
J(w_0,w_1,...w_m) = \sum_{i=1}^n\ (h_{x^i}(w_0,w_1,...w_m) - y_i)^2 +\lambda \sum_{j=1}^m{w_j}^2
J(w0,w1,...wm)=i=1∑n (hxi(w0,w1,...wm)−yi)2+λj=1∑mwj2
矩阵形式为 J ( W ) = ( X W − Y ) T ( X W − Y ) + λ ∣ ∣ W ∣ ∣ 2 2 J(W)=(XW−Y)^T(XW−Y)+\lambda ||W||_2^2 J(W)=(XW−Y)T(XW−Y)+λ∣∣W∣∣22
也就是 J ( W ) = ( X W − Y ) T ( X W − Y ) + λ W T W J(W)=(XW−Y)^T(XW−Y)+\lambda W^TW J(W)=(XW−Y)T(XW−Y)+λWTW
对于L2正则化,可以简单的应用在标准方程法,得到之前提到的最优解为
W
=
(
X
T
X
+
λ
I
)
−
1
X
T
Y
W = (X^TX+\lambda I)^{-1}X^TY
W=(XTX+λI)−1XTY
③ Elastic-net(L1与L2结合)
Elastic-net 弹性网增加的项为
λ
∑
j
=
1
m
α
∣
w
j
∣
+
(
1
−
α
)
w
j
2
\lambda \sum_{j=1}^m{\alpha|w_j|+(1-\alpha)w_j}^2
λj=1∑mα∣wj∣+(1−α)wj2
此处的
α
\alpha
α并不是学习率,而是平衡 L1 与 L2 的权重。
④ 浅谈L1与L2正则化
在实际应用中,L1由于绝对值的存在更难计算,并且得到的参数序列会比L2的更加稀疏,更多的参数会被归为0。
5 非线性回归
一般在处理线性回归问题,很可能自变量与因变量之间不是简单的线性关系。这时我们可以对特征或是预测的结果进行非线性变换,从而达到非线性回归的效果。经典的有多项式回归,广义线性回归。
① 多项式回归
多项式回归就是对特征进行多项式变换,比如一个只有两个特征值的线性回归,假设原模型公式为
h
w
(
x
1
,
x
2
)
=
w
0
+
w
1
x
1
+
w
2
x
2
h_w(x_1,x_2) = w_0+w_1x_1+w_2x_2
hw(x1,x2)=w0+w1x1+w2x2
进行二次多项式变换后就是
h
w
(
x
1
,
x
2
,
x
1
x
2
,
x
1
2
x
2
2
)
=
w
0
+
w
1
x
1
+
w
2
x
2
+
w
3
x
1
x
2
+
w
4
x
1
2
+
w
5
x
2
2
h_w(x_1,x_2,x_1x_2,{x_1}^2{x_2}^2) = w_0+w_1x_1+w_2x_2+w_3x_1x_2+w_4{x_1}^2+w_5{x_2}^2
hw(x1,x2,x1x2,x12x22)=w0+w1x1+w2x2+w3x1x2+w4x12+w5x22
虽然这种增加特征维度的变换一般能增加模型的非线性表达能力,但也很可能会造成过拟合,因此使用的时候也需注意
② 广义线性回归
此时不是对特征进行非线性变换,而是对预测的结果进行变换,跟神经网络中的激活函数类似。比如我们原本的预测值为
h
w
(
x
1
,
x
2
)
=
w
0
+
w
1
x
1
+
w
2
x
2
h_w(x_1,x_2) = w_0+w_1x_1+w_2x_2
hw(x1,x2)=w0+w1x1+w2x2
我们可以对得到的结果进行指数变换为
e
h
w
(
x
1
,
x
2
)
=
e
w
0
+
w
1
x
1
+
w
2
x
2
e^{h_w(x_1,x_2)} = e^{w_0+w_1x_1+w_2x_2}
ehw(x1,x2)=ew0+w1x1+w2x2
此处的变换函数 G ( z ) = e z G(z) =e^z G(z)=ez
在广义线性回归中称这种或其他类型的变换函数为联系函数,但我们一般习惯叫它们激活函数
更多推荐
所有评论(0)