这里参考吴恩达的机器学习的1-5章,主要讲线性回归的应用。
1. 通过微分方法推导线性回归
这里主要讲解一个特征变量下的线性回归方法的使用:
假设函数(Hypothesis Function) :
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x) = \theta_0 + \theta_1x
hθ(x)=θ0+θ1x,很显然它是一个线性函数。
其中 x 就是训练样本中的特征变量, y 就是对应于特征变量x的样本实际值,所以 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i))就表示样本集中的每一个样本点。
θ 0 , θ 1 \theta_0, \theta_1 θ0,θ1是两个参数, 接下来我们就会通过训练样本数据来计算出它们的具体值是多少。
我们知道 实际样本值
y
和
h
θ
(
x
)
y和 h_\theta(x)
y和hθ(x)的值是有偏差的, 那么我们的代价函数(Cost Function)如下:
J
(
θ
0
,
θ
1
)
=
1
/
2
m
∗
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_0,\theta_1) = 1/2m* \sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2
J(θ0,θ1)=1/2m∗i=1∑m(hθ(x(i))−y(i))2
上面这个代价函数就是计算整个训练样本集中的预测值与实际值的方差.
这里的m表示样本集的总数量.
下一步我们的目标就是找到这个代价函数的最小值 Minimize
θ
0
,
θ
1
J
(
θ
0
,
θ
1
)
_{\theta_0,\theta_1} J(\theta_0,\theta_1)
θ0,θ1J(θ0,θ1), 也就是找到一个误差最小,最接近于真实样本的情况。
目前这个代价函数有两个变量,
θ
0
,
θ
1
\theta_0,\theta_1
θ0,θ1。如何找到这个凸函数的最小值呢?首先我们复习一下微分(导数)的原理, 根据费马引理和函数的极值定理1可知:
函数 f ( x ) f(x) f(x)在 f ′ ( x 0 ) = 0 f'(x_0)=0 f′(x0)=0处,存在极值(极大值或极小值)。
当 f ′ ( x ) f'(x) f′(x) 在靠近 x 0 x_0 x0点时, “左负右正”( 即 x < x 0 x<x_0 x<x0时, f ′ ( x ) < 0 , x > x 0 f'(x)<0, x>x_0 f′(x)<0,x>x0时, f ′ ( x ) > 0 f'(x)>0 f′(x)>0), 那么在 x 0 x_0 x0处, f(x)存在极小值。
所以这里求出 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1) 分别对 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的偏导数, 得到偏导数接近于0时的 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1, 那么它们就是我们要找的最好的假设函数的参数了。
根据复合函数的求导法则:
d y d x = d y d u ∗ d u d x \frac{dy}{dx}=\frac{dy}{du}*\frac{du}{dx} dxdy=dudy∗dxdu
对 θ 0 \theta_0 θ0求偏导数的结果为: ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 / m ∗ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial}{\partial \theta_0}J(\theta_0,\theta_1)=1/m*\sum_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)}) ∂θ0∂J(θ0,θ1)=1/m∗i=1∑m(hθ(x(i))−y(i))
对 θ 1 \theta_1 θ1求偏导数的结果为: ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 / m ∗ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial}{\partial \theta_1}J(\theta_0,\theta_1)=1/m*\sum_{i=1}^m (h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} ∂θ1∂J(θ0,θ1)=1/m∗i=1∑m(hθ(x(i))−y(i))x(i)
梯度下降法(Gradient descent)
通过求代价函数的导数(偏导数), 逐步逼近(局部)最小值。
repeat until convergence {
同步更新 θ \theta θ值,直到 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1不再变化,也就说明它的偏导数接近于0了,所以这个式子减去偏导数的值不再变了。
α \alpha α是一个常量,这里叫学习率,表示每一次循环移动步伐的大小, 0 < α < 1 0 \lt \alpha \lt 1 0<α<1,它通常设置为一个极小值, α = 0.03 \alpha = 0.03 α=0.03,如果它的值太大,有可能一下越过极小值(步子迈大了^_^),往往预测不到最佳结果,太小的话,移动得很慢,梯度下降的效率会比较低。
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_0:=\theta_0-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)}) θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \theta_1:=\theta_1-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} θ1:=θ1−αm1∑i=1m(hθ(x(i))−y(i))x(i)
}
下面图示梯度下降法的执行过程:
图1.1 | 图1.2 | 图1.3 |
- 图1.1所示 J ( θ 1 ) J(\theta_1) J(θ1)函数,当 θ 1 \theta_1 θ1在最小值右侧时, ∂ ∂ θ 1 J ( θ 1 ) ≥ 0 \frac{\partial}{\partial \theta_1}J(\theta_1) \ge0 ∂θ1∂J(θ1)≥0,所以 θ 1 \theta_1 θ1逐渐减小,由右向左移动,慢慢接近最小值;
- 图1.1所示 J ( θ 1 ) J(\theta_1) J(θ1)函数,当 θ 1 \theta_1 θ1在最小值左侧时, ∂ ∂ θ 1 J ( θ 1 ) ≤ 0 \frac{\partial}{\partial \theta_1}J(\theta_1) \le0 ∂θ1∂J(θ1)≤0,所以 θ 1 \theta_1 θ1逐渐增大,由左向右移动,慢慢接近最小值;
- 图1.2所示, θ 1 \theta_1 θ1越靠近最小值,它每次循环移动的步伐就越小,因为我们知道 J ( θ 1 ) J(\theta_1) J(θ1)的导数表示 J ( θ 1 ) J(\theta_1) J(θ1)函数切线的斜率,越接近最小值,它的斜率越小,直到趋近于0,所以这个算法有个非常好的特点就是我们不需要动态调小 α \alpha α值,就可以达到越来越慢,以至于不会错过极小值所在的点。
- 图1.3所示,实际 J ( θ 0 , θ 1 ) , θ 0 , θ 1 J(\theta_0,\theta_1), \theta_0, \theta_1 J(θ0,θ1),θ0,θ1构成一个三维空间图形,该图描绘出真实的运动轨迹,也就是我们求偏导数的原因(参考偏导数的几何意义)。
多个特征变量的情况
上面我们讨论的时一个特征变量的情况, 我们也可以推导出有n个特征变量时的
θ
0
,
θ
1
,
θ
2
,
.
.
.
θ
n
\theta_0, \theta_1, \theta_2, ... \theta_n
θ0,θ1,θ2,...θn 的值。
上面的假设函数改成如下:
h
θ
(
x
0
,
x
1
,
.
.
.
,
x
n
)
=
θ
0
x
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
h_{\theta}(x_0,x_1,...,x_n) = \theta_0x_0 + \theta_1x_1+...+\theta_nx_n
hθ(x0,x1,...,xn)=θ0x0+θ1x1+...+θnxn
上面的梯度下降法同步更新也改成如下:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
其中 j = 0 , 1 , . . . , n j=0, 1, ..., n j=0,1,...,n
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0:=\theta_0-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_0^{(i)} θ0:=θ0−αm1∑i=1m(hθ(x(i))−y(i))x0(i)
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) \theta_1:=\theta_1-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_1^{(i)} θ1:=θ1−αm1∑i=1m(hθ(x(i))−y(i))x1(i)
…
θ n : = θ n − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x n ( i ) \theta_n:=\theta_n-\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_n^{(i)} θn:=θn−αm1∑i=1m(hθ(x(i))−y(i))xn(i)
2. 使用正规方程来推导线性回归
其实在线性代数中,正规方程是由正交投影(Orthogonal Projection)推导出来的,下面我们阐述一下这一过程。
正交补集(Orthogonal complement)
对于向量集合
S
,
S
⊥
S,S^{\perp}
S,S⊥,如果满足:
S
⊥
=
{
v
:
v
⋅
u
=
0
,
∀
u
∈
S
}
S^{\perp}=\{v:v\cdot u=0,\forall u\in S\}
S⊥={v:v⋅u=0,∀u∈S}
其中 v v v是 S ⊥ S^{\perp} S⊥中的任意向量, u u u是 S S S中的任意向量
v ⋅ u = v T ∗ u v\cdot u=v^T*u v⋅u=vT∗u,即两个向量做Dot-Product
那么我们就说, 集合 S ⊥ S^{\perp} S⊥是集合 S S S的正交补集。
正交投影(Orthogonal Projection)
我们知道对于任意向量
u
u
u都可以分解成任意两个向量相加,而正交投影是其中的一种分解方式,其定义如下:
对于任何一个向量
u
u
u, 都可以分解成两个向量
w
,
z
w, z
w,z ,使得
u
=
w
+
z
,
w
∈
W
,
z
∈
W
⊥
u = w + z, w \in W, z\in W^{\perp}
u=w+z,w∈W,z∈W⊥,并且
w
⋅
z
=
0
w\cdot z = 0
w⋅z=0,而且这种分解还是唯一的.,这一过程可以叫做正交投影。分解之后的这两个向量
w
,
z
w,z
w,z在坐标系上看是互相垂直的。
正交投影过程 | 正交投影是所有分解中最近的 | 图4:证明过程(为什么最近) |
图4就是证明为什么向量 w w w是距离 u u u最近的,也就是 u − w u-w u−w的值最小。
向量 w w w就是向量 u u u在集合 W W W中的投影,记作 w = U W ( u ) w=U_W(u) w=UW(u),和其它的投影比较起来它是唯一正交的。
已知正交分解 z = u − w z=u-w z=u−w,任取一个向量 w ′ ∈ W w'\in W w′∈W,只要证明 z < ∣ u − w ′ ∣ z<|u-w'| z<∣u−w′∣成立,那么就说明 z z z是最小的,其实从图中显而易见, 唯有 z z z是垂直于 W W W的,垂直的距离最短嘛。
根据 z ∈ W ⊥ z\in W^{\perp} z∈W⊥,所以 z z z与 W W W中的任意向量做Dot-Product都是0,所以存在 ( w − w ′ ) ∈ W , ( u − w ) ⋅ ( w − w ′ ) = 0 (w-w')\in W ,(u-w)\cdot (w-w')=0 (w−w′)∈W,(u−w)⋅(w−w′)=0。
根据Pythagorean Theorem(毕氏定理) ∣ ∣ u + v ∣ ∣ 2 = ∣ ∣ u ∣ ∣ 2 + 2 u ⋅ v + ∣ ∣ v ∣ ∣ 2 ||u+v||^2=||u||^2+2u\cdot v +||v||^2 ∣∣u+v∣∣2=∣∣u∣∣2+2u⋅v+∣∣v∣∣2,构造并证明出: ∣ ∣ u − w ′ ∣ ∣ 2 > ∣ ∣ u − w ∣ ∣ 2 ||u-w'||^2>||u-w||^2 ∣∣u−w′∣∣2>∣∣u−w∣∣2,所以 z z z是最小的。
正规方程的推导过程
根据上面的知识点,下面我们来推导正规方程。
已知
C
C
C是一个
n
∗
k
n*k
n∗k的矩阵,且它的列向量构成的集合是集合
W
W
W的一个basis,也就是说它的列向量都是线性无关(linear independent)的;
对于任意一个向量
u
,
w
=
U
W
(
u
)
u, w= U_W(u)
u,w=UW(u),
w
w
w是向量
u
u
u在集合
W
W
W中的正交投影,
w
∈
W
w\in W
w∈W;
证明推导过程:
w
=
C
∗
b
,
b
w = C*b , b
w=C∗b,b是任意一个向量,
b
∈
R
k
b\in R^k
b∈Rk, 其实就是线性组合(linear combination)的过程, 集合
W
W
W内的一个向量
w
w
w 一定可以用
W
W
W的basis做线性组合得到.
z
=
u
−
w
z = u-w
z=u−w,
z
∈
W
⊥
z\in W^{\perp}
z∈W⊥ 。
那么:
w
⋅
z
=
0
w\cdot z = 0
w⋅z=0, 推出
C
⋅
(
u
−
w
)
=
0
C\cdot (u-w) = 0
C⋅(u−w)=0, 因为
C
C
C中的列向量属于集合
W
W
W, 而
u
−
w
u-w
u−w 属于集合
W
⊥
W^{\perp}
W⊥, 所以它们进行正交化操作一定是0,注意这里的0指的是0向量。
所以:
C
T
∗
(
u
−
w
)
=
0
C^T * (u-w) = 0
CT∗(u−w)=0, 它俩相乘等于0向量;
推出:
C
T
∗
u
−
C
T
∗
w
=
0
C^T * u - C^T * w = 0
CT∗u−CT∗w=0;
推出:
C
T
∗
u
−
C
T
∗
(
C
∗
b
)
=
0
C^T * u - C^T *(C*b) = 0
CT∗u−CT∗(C∗b)=0;
推出:
C
T
∗
u
=
C
T
∗
C
∗
b
C^T * u = C^T *C*b
CT∗u=CT∗C∗b,然后 两边同时乘以
(
C
T
∗
C
)
−
1
(C^T*C)^{-1}
(CT∗C)−1 得到:
b
=
(
C
T
∗
C
)
−
1
∗
C
T
∗
u
b = (C^T *C)^{-1} * C^T * u
b=(CT∗C)−1∗CT∗u
w
=
C
∗
(
C
T
∗
C
)
−
1
∗
C
T
∗
u
w = C * (C^T *C)^{-1} * C^T * u
w=C∗(CT∗C)−1∗CT∗u
其中 ( C T ∗ C ) − 1 (C^T *C)^{-1} (CT∗C)−1是 ( C T ∗ C ) (C^T *C) (CT∗C)的逆矩阵.
任何一个矩阵与其逆矩阵相乘都等于单位矩阵 I n I_n In,而 I n I_n In乘以任何矩阵都等于该矩阵本身。
这里注意:不是所有矩阵都可逆的,这里矩阵 C T C^T CT就是不可逆的。
正规方程在线性回归中的应用
返回到上面的假设函数 h θ ( x 0 , x 1 , x 3 , x 4 ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 h_{\theta}(x_0,x_1,x_3,x_4) = \theta_0x_0 + \theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4 hθ(x0,x1,x3,x4)=θ0x0+θ1x1+θ2x2+θ3x3+θ4x4,我们的训练样本集中有多个特征变量 x 0 , x 1 , x 2 , x 3 , x 4 x_0,x_1, x_2,x_3,x_4 x0,x1,x2,x3,x4以及实际值 y y y,样本集如下表格描述:
x 0 x_0 x0 | 房屋尺寸(feet
2
^2
2) x 1 x_1 x1 | 卧室数量 x 2 x_2 x2 | 楼层数 x 3 x_3 x3 | 房龄 x 4 x_4 x4 | 价格($1000) y y y |
---|---|---|---|---|---|
1 | 2104 | 5 | 1 | 45 | 460 |
1 | 1416 | 3 | 2 | 40 | 232 |
1 | 1534 | 3 | 2 | 30 | 315 |
1 | 852 | 2 | 1 | 36 | 178 |
1 | 566 | 1 | 10 | 25 | 166 |
1 | 3534 | 7 | 7 | 30 | 609 |
1 | 1044 | 4 | 3 | 19 | 299 |
根据输入的特征参数值来预测房屋价格
根据上面的表格,我们可以构造出一个包含所有特征参数的矩阵:
X
=
[
1
2104
5
1
45
1
1416
3
2
40
1
1534
3
2
30
1
852
2
1
36
1
566
1
10
25
1
3534
7
7
30
1
3534
7
7
30
]
X=\begin{bmatrix} 1 & 2104 & 5 & 1 & 45 \\ 1 & 1416 & 3 & 2 & 40 \\ 1 & 1534 & 3 & 2 & 30 \\ 1 & 852 & 2 & 1 & 36 \\ 1 & 566 & 1 & 10 & 25 \\ 1 & 3534 & 7 & 7 & 30 \\ 1 & 3534 & 7& 7 & 30 \end{bmatrix}
X=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡11111112104141615348525663534353453321771221107745403036253030⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
房屋实际价格向量:
y
=
[
460
232
315
178
166
609
299
]
y=\begin{bmatrix} 460 \\ 232 \\ 315 \\ 178 \\ 166 \\ 609 \\ 299 \end{bmatrix}
y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡460232315178166609299⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
特征值参数:
θ
=
[
θ
0
θ
1
θ
2
θ
3
θ
4
]
\theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \theta_3 \\ \theta_4 \\ \end{bmatrix}
θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2θ3θ4⎦⎥⎥⎥⎥⎤
那么我们上面的假设函数可以改成如下:
h
θ
(
x
0
,
x
1
,
x
3
,
x
4
)
=
X
∗
θ
h_{\theta}(x_0,x_1,x_3,x_4)=X*\theta
hθ(x0,x1,x3,x4)=X∗θ
所以这里的
X
X
X就相当于正规方程中的
C
C
C,
θ
\theta
θ相当于向量
b
b
b,
y
y
y相当于向量
u
u
u。
θ
=
(
X
T
X
)
−
1
X
T
y
\theta = (X^T X)^{-1} X^T y
θ=(XTX)−1XTy
h
θ
(
x
0
,
x
1
,
x
3
,
x
4
)
=
X
(
X
T
X
)
−
1
X
T
y
h_{\theta}(x_0,x_1,x_3,x_4)=X (X^T X)^{-1} X^T y
hθ(x0,x1,x3,x4)=X(XTX)−1XTy,就是房屋实际价格
y
y
y在
X
X
X上的正交投影,它和房屋实际价格
y
y
y之间的差是最小的,所以也是最接近于
y
y
y的值了。
那么我们在Octave/Matlab中直接执行如下命令就可以得到向量
θ
\theta
θ的结果了:
>>pinv(X’ * X) * X’ * y
比起梯度下降法求
θ
\theta
θ,正规方程是不是很简单。