根据上一篇开篇的那个思维导图,还是从有监督机器学习开始,其中线性模型里的算法是大多数机器学习者最初接触的,那么就从它开始吧。
一、线性模型
根据周志华老师的《机器学习》(俗称西瓜书)中的定义,线性模型是指其通过属性的线性组合来进行预测的函数:
f
(
x
)
=
w
1
∗
x
1
+
w
2
∗
x
2
+
w
3
∗
x
3
+
.
.
.
+
w
d
∗
x
d
+
b
f(x)=w_1*x_1+w_2*x_2+w_3*x_3+...+w_d*x_d+b
f(x)=w1∗x1+w2∗x2+w3∗x3+...+wd∗xd+b
用一般的向量形式,则写成:
f
(
x
)
=
w
T
∗
x
+
b
f(x)=w^{T}*x+b
f(x)=wT∗x+b,其中
w
=
(
w
1
,
w
2
,
.
.
.
,
w
n
)
w=(w_1,w_2,...,w_n)
w=(w1,w2,...,wn)
在学到
w
w
w和
b
b
b之后,模型也就确定了。因此,我们对模型有了一个初步了解,就是说要用训练集学习出一条线(or更高维度的平面或者其他什么)作为模型函数,而究竟这条线是用来拟合数据还是分类数据,就要看模型是属于回归模型还是分类模型了。
比如线性回归是属于回归模型的,而逻辑回归是属于分类模型的。我会分两章来分别记录这两种模型。
二、线性回归
2.1 线性回归概述
线性回归是对给定的训练数据集进行线性拟合,从而找到一条能使得大多数样本点都尽可能被准确预测的拟合线,比如公式如下:
f
(
x
i
)
=
w
T
∗
x
i
+
b
f(x_i)=w^{T}*x_i+b
f(xi)=wT∗xi+b,使得
f
(
x
i
)
≈
y
i
f(x_i)\approx y_i
f(xi)≈yi
二维下的线性回归是一条线,三维下的是一个平面,N维。。。(画不出来了)
二维的线性回归模型
三维的线性回归模型
2.2 线性回归的学习策略
对于线性回归问题,我们最终的目的就是学习得到
w
w
w和
b
b
b,建立起这个模型公式,而目前最首要的问题就是:如何确定
w
w
w和
b
b
b最优就是接下来要学习的目标了。
求解
w
w
w和
b
b
b的最优解,常用的有两种方法(我目前所学到的,以后如果遇到更多解法且消化了再补充记录),一种是最小二乘法,另一种是梯度下降法。
2.2.1 最小二乘法
接下来将通过一个贴近真实世界的例子来使用最小二乘法来学习到
w
w
w和
b
b
b.
以估计房价为例吧,假设真实世界里房子的面积
x
x
x和房价
y
y
y的关系是线性关系,且真实世界存在无法估计的误差
ϵ
\epsilon
ϵ,由于真实世界影响房价的因素(也就是房屋特征)很多,所以本例中就列举两个因素(特征,本例中比如房屋的面积
x
1
x_1
x1和卧室的数量
x
2
x_2
x2),这样模型就是
y
=
w
0
+
w
1
∗
x
1
+
w
2
∗
x
2
+
ϵ
y=w_0+w_1*x_1+w_2*x_2+\epsilon
y=w0+w1∗x1+w2∗x2+ϵ。
w
0
w_0
w0,
w
1
w_1
w1,
w
2
w_2
w2的值让误差的平方和
ϵ
T
ϵ
\epsilon^{T}\epsilon
ϵTϵ最小。
假如我们收集了五条数据:
y
1
=
w
0
+
w
1
∗
x
11
+
w
2
∗
x
12
+
ϵ
1
y_1=w_0+w_1*x_{11}+w_2*x_{12}+\epsilon_1
y1=w0+w1∗x11+w2∗x12+ϵ1
y
2
=
w
0
+
w
1
∗
x
21
+
w
2
∗
x
22
+
ϵ
2
y_2=w_0+w_1*x_{21}+w_2*x_{22}+\epsilon_2
y2=w0+w1∗x21+w2∗x22+ϵ2
y
3
=
w
0
+
w
1
∗
x
31
+
w
2
∗
x
32
+
ϵ
3
y_3=w_0+w_1*x_{31}+w_2*x_{32}+\epsilon_3
y3=w0+w1∗x31+w2∗x32+ϵ3
y
4
=
w
0
+
w
1
∗
x
41
+
w
2
∗
x
42
+
ϵ
4
y_4=w_0+w_1*x_{41}+w_2*x_{42}+\epsilon_4
y4=w0+w1∗x41+w2∗x42+ϵ4
y
5
=
w
0
+
w
1
∗
x
51
+
w
2
∗
x
52
+
ϵ
5
y_5=w_0+w_1*x_{51}+w_2*x_{52}+\epsilon_5
y5=w0+w1∗x51+w2∗x52+ϵ5
用矩阵将这组式子进行简化,如下所示:
y
=
[
y
1
y
2
y
3
y
4
y
5
]
y=\begin{bmatrix}y_1\\ y_2\\ y_3\\ y_4\\ y_5\end{bmatrix}
y=⎣⎢⎢⎢⎢⎡y1y2y3y4y5⎦⎥⎥⎥⎥⎤
X
=
[
1
x
11
x
12
1
x
21
x
22
1
x
31
x
32
1
x
41
x
42
1
x
51
x
52
]
X=\begin{bmatrix} 1& x_{11}&x_{12} \\ 1& x_{21}&x_{22} \\ 1& x_{31}&x_{32} \\ 1& x_{41}&x_{42} \\ 1& x_{51}&x_{52} \end{bmatrix}
X=⎣⎢⎢⎢⎢⎡11111x11x21x31x41x51x12x22x32x42x52⎦⎥⎥⎥⎥⎤
w
=
[
w
0
w
1
w
2
]
w=\begin{bmatrix} w_0\\ w_1\\ w_2 \end{bmatrix}
w=⎣⎡w0w1w2⎦⎤
ϵ
=
[
ϵ
1
ϵ
2
ϵ
3
ϵ
4
ϵ
5
]
\epsilon =\begin{bmatrix} \epsilon _1\\ \epsilon _2\\ \epsilon _3\\ \epsilon _4\\ \epsilon _5 \end{bmatrix}
ϵ=⎣⎢⎢⎢⎢⎡ϵ1ϵ2ϵ3ϵ4ϵ5⎦⎥⎥⎥⎥⎤
那么
y
=
X
w
+
ϵ
y=Xw+\epsilon
y=Xw+ϵ,最小二乘法的思想就是要找到
w
w
w让误差的平方和最小,即
m
i
n
w
 
ϵ
T
ϵ
\underset{w}{min} \:\epsilon^{T}\epsilon
wminϵTϵ
由于
ϵ
=
y
−
X
w
\epsilon=y-Xw
ϵ=y−Xw,
(
A
B
)
T
=
B
T
A
T
(AB)^{T}=B^{T}A^{T}
(AB)T=BTAT且矩阵代数符合乘法分配律,因此:
ϵ
T
ϵ
 
=
(
y
−
X
w
)
T
(
y
−
X
w
)
\epsilon^{T}\epsilon\:=(y-Xw)^T(y-Xw)
ϵTϵ=(y−Xw)T(y−Xw)
=
(
y
−
X
w
)
T
y
−
(
y
−
X
w
)
T
X
w
\qquad=(y-Xw)^Ty-(y-Xw)^TXw
=(y−Xw)Ty−(y−Xw)TXw
=
y
T
y
−
w
T
X
T
y
−
y
T
X
w
+
w
T
X
T
X
w
\qquad=y^Ty-w^TX^Ty-y^TXw+w^TX^TXw
=yTy−wTXTy−yTXw+wTXTXw
由于
w
T
X
T
y
w^TX^Ty
wTXTy和
y
T
X
w
y^TXw
yTXw都是
1
∗
1
1*1
1∗1的标量,对于标量
a
a
a,
a
T
=
a
a^T=a
aT=a,因此
w
T
X
T
y
=
(
w
T
X
T
y
)
T
=
y
T
X
w
w^TX^Ty=(w^TX^Ty)^T=y^TXw
wTXTy=(wTXTy)T=yTXw
那么
ϵ
T
ϵ
=
y
T
y
−
2
w
T
X
T
y
+
w
T
X
T
X
w
\epsilon^T\epsilon=y^Ty-2w^TX^Ty+w^TX^TXw
ϵTϵ=yTy−2wTXTy+wTXTXw
令
ϵ
T
ϵ
\epsilon^T\epsilon
ϵTϵ的梯度为0即可求得最小值
w
^
\widehat{w}
w
,梯度就是导数的标量、向量或者矩阵形式,用
▽
\triangledown
▽表示梯度。
对于
ϵ
T
ϵ
\epsilon^T\epsilon
ϵTϵ的梯度被定义为:
▽
w
=
[
∂
ϵ
T
ϵ
∂
w
0
∂
ϵ
T
ϵ
∂
w
1
∂
ϵ
T
ϵ
∂
w
2
]
\triangledown_w=\begin{bmatrix} \frac{\partial \epsilon^T\epsilon}{\partial w_0}\\\\ \frac{\partial \epsilon^T\epsilon}{\partial w_1}\\\\ \frac{\partial \epsilon^T\epsilon}{\partial w_2} \end{bmatrix}
▽w=⎣⎢⎢⎢⎢⎢⎡∂w0∂ϵTϵ∂w1∂ϵTϵ∂w2∂ϵTϵ⎦⎥⎥⎥⎥⎥⎤
分别对
w
0
,
w
1
,
w
2
w0,w1,w2
w0,w1,w2求偏导,组成向量就是
ϵ
T
ϵ
\epsilon^T\epsilon
ϵTϵ的梯度。
那么如何求呢?
可以将其分为三部分
y
T
y
y^Ty
yTy、
−
2
w
T
X
T
y
-2w^TX^Ty
−2wTXTy和
w
T
X
T
X
w
w^TX^TXw
wTXTXw分别对
w
w
w求梯度。
由于
y
T
y
y^Ty
yTy中并没有
w
w
w,因此
▽
w
y
T
y
=
0
\triangledown_wy^Ty=0
▽wyTy=0;
在求另外两项梯度前,先看如下情况:
情况1:求
▽
w
w
T
a
,
a
=
[
a
1
a
2
a
3
]
\triangledown_ww^Ta,a=\begin{bmatrix} a1\\ a2\\ a3\end{bmatrix}
▽wwTa,a=⎣⎡a1a2a3⎦⎤
用标量形式表示
w
T
a
=
w
0
a
0
+
w
1
a
1
+
w
2
a
2
w^Ta=w_0a_0+w_1a_1+w_2a_2
wTa=w0a0+w1a1+w2a2,可得
▽
w
w
T
a
=
[
∂
w
T
a
∂
w
0
∂
w
T
a
∂
w
1
∂
w
T
a
∂
w
2
]
=
[
a
0
a
1
a
2
]
=
a
\triangledown_ww^Ta=\begin{bmatrix} \frac{\partial w^Ta}{\partial w_0}\\\\ \frac{\partial w^Ta}{\partial w_1}\\\\\frac{\partial w^Ta}{\partial w_2} \end{bmatrix}=\begin{bmatrix} a0\\ a1\\ a2 \end{bmatrix}=a
▽wwTa=⎣⎢⎢⎢⎢⎢⎡∂w0∂wTa∂w1∂wTa∂w2∂wTa⎦⎥⎥⎥⎥⎥⎤=⎣⎡a0a1a2⎦⎤=a
因此
ϵ
T
ϵ
\epsilon^T\epsilon
ϵTϵ中
−
2
w
T
X
T
y
-2w^TX^Ty
−2wTXTy的梯度是
−
2
X
T
y
-2X^Ty
−2XTy
情况2:对于
▽
w
w
T
A
w
\triangledown _ww^TAw
▽wwTAw,
A
A
A必须为对称矩阵,即:
A
=
[
a
11
a
12
a
13
a
12
a
22
a
23
a
13
a
23
a
33
]
A=\begin{bmatrix} a_{11} & a_{12} &a_{13} \\ a_{12} & a_{22} &a_{23} \\ a_{13}&a_{23} & a_{33} \end{bmatrix}
A=⎣⎡a11a12a13a12a22a23a13a23a33⎦⎤
可得
w
T
A
w
=
[
w
0
w
1
w
2
]
[
a
11
a
12
a
13
a
12
a
22
a
23
a
13
a
23
a
33
]
[
w
0
w
1
w
2
]
=
[
w
0
w
1
w
2
]
[
a
11
w
0
+
a
12
w
1
+
a
13
w
2
a
12
w
0
+
a
22
w
1
+
a
23
w
2
a
13
w
0
+
a
23
w
1
+
a
33
w
2
]
=
a
11
w
0
2
+
a
22
w
1
2
+
a
33
w
2
2
+
2
a
12
w
0
w
1
+
2
a
13
w
0
w
2
+
2
a
23
w
1
w
2
w^TAw=\begin{bmatrix} w_0 & w_1& w_2 \end{bmatrix}\begin{bmatrix} a_{11} & a_{12} &a_{13} \\ a_{12} & a_{22} &a_{23} \\ a_{13}&a_{23} & a_{33} \end{bmatrix}\begin{bmatrix} w_0\\\\ w_1\\\\ w_2 \end{bmatrix}\\ \qquad\quad=\begin{bmatrix} w_0 & w_1& w_2 \end{bmatrix}\begin{bmatrix} a_{11}w_0+a_{12}w_1+a_{13}w_2\\ a_{12}w_0+a_{22}w_1+a_{23}w_2\\ a_{13}w_0+a_{23}w_1+a_{33}w_2 \end{bmatrix}\\ \qquad\quad=a_{11}w_0^2+a_{22}w_1^2+a_{33}w_2^2+2a_{12}w_0w_1+2a_{13}w_0w_2+2a_{23}w_1w_2
wTAw=[w0w1w2]⎣⎡a11a12a13a12a22a23a13a23a33⎦⎤⎣⎢⎢⎢⎢⎡w0w1w2⎦⎥⎥⎥⎥⎤=[w0w1w2]⎣⎡a11w0+a12w1+a13w2a12w0+a22w1+a23w2a13w0+a23w1+a33w2⎦⎤=a11w02+a22w12+a33w22+2a12w0w1+2a13w0w2+2a23w1w2
因此,
▽
w
w
T
A
w
=
[
∂
w
T
A
w
∂
w
0
∂
w
T
A
w
∂
w
1
∂
w
T
A
w
∂
w
2
]
=
[
2
a
11
w
0
+
2
a
12
w
1
+
2
a
13
w
2
2
a
12
w
0
+
2
a
22
w
1
+
2
a
23
w
2
2
a
13
w
0
+
2
a
23
w
1
+
2
a
33
w
2
]
=
2
A
w
\triangledown_ww^TAw=\begin{bmatrix} \frac{\partial w^TAw}{\partial w0}\\\\ \frac{\partial w^TAw}{\partial w1}\\\\ \frac{\partial w^TAw}{\partial w2} \end{bmatrix}=\begin{bmatrix} 2a_{11}w_0+2a_{12}w_1+2a_{13}w_2\\\\ 2a_{12}w_0+2a_{22}w_1+2a_{23}w_2\\\\ 2a_{13}w_0+2a_{23}w_1+2a_{33}w_2 \end{bmatrix}=2Aw
▽wwTAw=⎣⎢⎢⎢⎢⎢⎡∂w0∂wTAw∂w1∂wTAw∂w2∂wTAw⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡2a11w0+2a12w1+2a13w22a12w0+2a22w1+2a23w22a13w0+2a23w1+2a33w2⎦⎥⎥⎥⎥⎤=2Aw
对于 ϵ T ϵ \epsilon^T\epsilon ϵTϵ中的 w T X T X w w^TX^TXw wTXTXw,无论有多少条数据, X T X X^TX XTX都是 3 × 3 3\times 3 3×3对称矩阵,因此可得 w T X T X w w^TX^TXw wTXTXw的梯度是 2 X T X w 2X^TXw 2XTXw。
由以上推导可得梯度是:
▽
w
ϵ
T
ϵ
=
[
∂
ϵ
T
ϵ
∂
w
0
∂
ϵ
T
ϵ
∂
w
1
∂
ϵ
T
ϵ
∂
w
0
]
=
2
X
T
X
w
−
2
X
T
y
\triangledown_w\epsilon^T\epsilon=\begin{bmatrix} \frac{\partial \epsilon^T\epsilon}{\partial w_0}\\\\ \frac{\partial \epsilon^T\epsilon}{\partial w_1}\\\\ \frac{\partial \epsilon^T\epsilon}{\partial w_0}\\\\ \end{bmatrix}=2X^TXw-2X^Ty
▽wϵTϵ=⎣⎢⎢⎢⎢⎢⎢⎢⎡∂w0∂ϵTϵ∂w1∂ϵTϵ∂w0∂ϵTϵ⎦⎥⎥⎥⎥⎥⎥⎥⎤=2XTXw−2XTy
当
ϵ
T
ϵ
\epsilon^T\epsilon
ϵTϵ最小时梯度为0,梯度上的各项偏导数为0,由此可得该位置的
w
^
\hat{w}
w^就是所求的
w
w
w
2
X
T
X
w
^
−
2
X
T
y
=
0
2X^TX\hat{w}-2X^Ty=0
2XTXw^−2XTy=0
X
T
X
w
^
=
X
T
y
X^TX\hat{w}=X^Ty
XTXw^=XTy
w
^
=
(
X
T
X
)
−
1
X
T
y
\hat{w}=\left ( X^TX \right )^{-1}X^Ty
w^=(XTX)−1XTy
2.2.2 梯度下降法
前文的最小二乘法直接对梯度求导找出极值来求线性回归损失函数的最优解,它为非迭代法。
本节将记录一种新的方法来求损失函数的极值:梯度下降法(Gradient Descendent, GD),梯度下降法为最优化算法通常用于求解函数的极值,梯度下降法为迭代法,给定一个β在梯度下降最快方向调整β,经过N次迭代后找到极值,也就是局部最小值或全局最小值。
来个梯度下降核心算法直接的表达:
R
e
p
e
a
t
{
θ
j
:
=
θ
j
−
α
∂
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
∂
θ
j
}
Repeat \left \{ \\ \theta _{j}:=\theta_{j}-\alpha \frac{\partial J\left (\theta_{0},\theta_{1},...,\theta_{n} \right )}{\partial \theta_{j}}\\ \right \}
Repeat{θj:=θj−α∂θj∂J(θ0,θ1,...,θn)}
可以看到,针对每一个系数,都采用对其取偏导数,然后使用一个合适的学习率参数
α
\alpha
α进行相乘并递减,重复这个过程,直到代价函数收敛到某个范围内。
随机梯度下降和批量梯度下降是两种迭代求解思路。
对于如下:
h
(
θ
)
=
∑
j
=
0
n
θ
j
x
j
h\left ( \theta \right )=\sum_{j=0}^{n}\theta _{j}x_{j}
h(θ)=∑j=0nθjxj
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
y
i
−
h
θ
(
x
i
)
)
2
J\left ( \theta \right )=\frac{1}{2m}\sum_{i=1}^{m}\left ( y^{i}-h_{\theta }\left ( x^{i} \right ) \right )^{2}
J(θ)=2m1∑i=1m(yi−hθ(xi))2
h
(
θ
)
h\left ( \theta \right )
h(θ)是要拟合的函数,
J
(
θ
)
J\left ( \theta \right )
J(θ)是损失函数,
θ
\theta
θ是参数,要迭代求解的值,
θ
\theta
θ求解出来了,那么最终要拟合的函数
h
(
θ
)
h\left ( \theta \right )
h(θ)就出来了。其中m是训练集的记录条数,i是参数的个数。
批量梯度下降(BGD)
求解思路如下:
- 将
J
(
θ
)
J\left ( \theta \right )
J(θ)对
θ
\theta
θ求偏导,得到每个
θ
\theta
θ对应的梯度,
∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i \frac{\partial J\left ( \theta \right )}{\partial\theta_j}=-\frac{1}{m}\sum_{i=1}^{m}\left ( y^i-h_\theta\left ( x^i \right ) \right )x_j^i ∂θj∂J(θ)=−m1∑i=1m(yi−hθ(xi))xji - 由于是要最小化风险函数,所以按每个参数
θ
\theta
θ的梯度负方向,来更新每个
θ
\theta
θ
θ j = θ j − 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i \theta_j=\theta_j-\frac{1}{m}\sum_{i=1}^{m}\left ( y^i-h_\theta\left ( x^i \right ) \right )x_j^i θj=θj−m1∑i=1m(yi−hθ(xi))xji - 从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度!!!因此,就引入了另外一种方法,随机梯度下降。
PS:批量梯度下降每次学习都是用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点非凸函数可能会收敛于局部极值点),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。
随机梯度下降(SGD)
求解思路如下:
- 上面的风险函数可以写成如下形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:
J ( θ ) = 1 m ∑ i = 1 m 1 2 ( y i − h θ ( x i ) ) 2 = 1 m ∑ i = 1 m c o s t ( θ , ( x i , y i ) ) J\left ( \theta \right )=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}\left ( y^i-h_\theta\left ( x^i \right ) \right )^2=\frac{1}{m}\sum_{i=1}^{m}cost\left ( \theta,\left ( x^i,y^i \right ) \right ) J(θ)=m1∑i=1m21(yi−hθ(xi))2=m1∑i=1mcost(θ,(xi,yi))
c o s t ( θ , ( x i , y i ) ) = 1 2 ( y i − h θ ( x i ) ) 2 cost\left ( \theta,\left ( x^i,y^i \right ) \right )=\frac{1}{2}\left ( y^i-h_\theta\left ( x^i \right ) \right )^2 cost(θ,(xi,yi))=21(yi−hθ(xi))2 - 每个样本的损失函数对
θ
\theta
θ求偏导得到对应梯度,来更新
θ
\theta
θ
θ j = θ j + ( y i − h θ ( x i ) ) x j i \theta_j=\theta_j+\left ( y^i-h_\theta\left(x^i\right) \right )x_j^i θj=θj+(yi−hθ(xi))xji - 随机梯度下降是通过每个样本来迭代更新一次,如果样本很大的情况(如几十万),那么可能只用其中的几万或者几千条的样本,就已经将 θ \theta θ迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
两者区别
- 批量梯度下降——最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。
- 随机梯度下降——最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体方向是向全局最优解的,最终的结果往往是在全局最优解附近。
未完待续。。。