本文关于吴恩达老师机器学习课程笔记~
多功能
在前面,我们假设房子的价格只与房子的大小这一因素有关系,因此在假设函数中只有一个参数 x ,即 h θ ( x ) = θ 0 + θ 1 x h_{\theta} (x) = \theta_0 + \theta_1 x hθ(x)=θ0+θ1x
那如果房子的价格跟多个因素有关系呢?比如大小、房间数量,楼层数量、房龄等,应该怎样表示假设函数 h(x) ?
我们把以上四个特征分别记为 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4,用 y 表示要预测的输出变量。
符号表示:
- n = 4 表示特征向量的数量
- x ( i ) x^{(i)} x(i) 表示第 i 个样本的特征向量, x ( i ) x^{(i)} x(i) 是 n 维向量
- x j ( i ) x^{(i)}_j xj(i) 表示第 i 个样本的第 j 个特征向量
既然有多个特征向量,线性回归假设应该为
h ( x ) = θ 0 + θ 1 x 1 + . . . + θ n x n h(x) = \theta_0 + \theta_1 x_1 + ...+\theta_n x_n h(x)=θ0+θ1x1+...+θnxn
为了表示方便,假设 x 0 = 1 x_0 = 1 x0=1,这意味着对于第 i 个训练样本,都有 x 0 ( i ) = 1 x_0^{(i)} = 1 x0(i)=1
x = [ x 0 x 1 ⋮ x n ] ∈ R n + 1 x = \begin{bmatrix} x_0\\ x_1\\ \vdots\\ x_n \end{bmatrix} \in \Bbb R^{n+1} x=⎣⎢⎢⎢⎡x0x1⋮xn⎦⎥⎥⎥⎤∈Rn+1 ~~~~~~ θ = [ θ 0 θ 1 ⋮ θ n ] ∈ R n + 1 \theta = \begin{bmatrix} \theta_0\\ \theta_1\\ \vdots\\ \theta_n \end{bmatrix} \in \Bbb R^{n+1} θ=⎣⎢⎢⎢⎡θ0θ1⋮θn⎦⎥⎥⎥⎤∈Rn+1
h ( x ) = θ 0 + θ 1 x 1 + . . . + θ n x n = θ T x h(x) = \theta_0 + \theta_1 x_1 + ...+\theta_n x_n = \theta^Tx h(x)=θ0+θ1x1+...+θnxn=θTx
多元梯度下降法
特征缩放
在具有多个特征的线性回归中,如果能确保特征都处在一个相近的范围,这样梯度下降法就能更快的收敛
具体的,假设有尺寸和房间数量两个特征, x 1 = s i z e ( 0 − 2000 f e e t 2 ) , x 2 = n u m b e r o f b e d r o o m s ( 1 − 5 ) x_1 = size(0-2000feet^2),x_2 = number~ of~ bedrooms(1-5) x1=size(0−2000feet2),x2=number of bedrooms(1−5)
画出 x 1 , x 2 x_1,x_2 x1,x2 代价函数的等高线图如下,如果直接运行梯度下降的话,梯度会来回波动,并且需要很长一段时间才能收敛到最小值
解决这个问题的一个有效方法就是进行特征缩放
令
x
1
=
s
i
z
e
(
f
e
e
t
2
)
2000
,
x
2
=
n
u
m
b
e
r
o
f
b
e
d
r
o
o
m
s
5
x_1= \frac{size(feet^2)}{2000},x_2 = \frac{number of bedrooms}{5}
x1=2000size(feet2),x2=5numberofbedrooms,则
0
≤
x
1
≤
1
,
0
≤
x
2
≤
1
0 \leq x_1 \leq 1,0 \leq x_2 \leq 1
0≤x1≤1,0≤x2≤1 ,得到的代价函数等高线图如下
经过特征缩放后的等高线图接近圆形,梯度下降很快收敛到最小值
更一般的,当我们在进行特征缩放时,通常将特征的取值约束到 -1 ~ +1范围内,至少不会偏离太多
均值归一化
用 x i − u i x_i - \mathit u_i xi−ui 代替 x i x_i xi(其中 u i \mathit u_i ui 为平均值)使得特征具有为 0 的平均值,很明显,我们不需要对 x 0 x_0 x0 执行这一步,因为 x 0 x_0 x0 恒为 1,不可能具有为 0 的平均值。
更一般的,令 x i = x i − u i s x_i = \frac{x_i - \mathit u_i}{s} xi=sxi−ui,其中 s 为最大值减最小值
经过特征缩放后,梯度下降的速度变得更快,收敛所需的迭代次数更少
学习率
在正常情况下,代价函数的值应该随着迭代次数的增加而下降,如图
若代价函数的值随着迭代次数的增加而增大或者上下波动,则应减小学习率 α \alpha α 的值。
学习率的选择
对每一个特定问题,梯度下降算法所需的迭代次数可能会相差很远。
- 若学习率设置太大,代价函数并不会在每次迭代后都下降
- 若学习率设置太小,代价函数收敛很慢
在学习率的选择上,可以把学习率设置为…,0.001,0.003,0.01,0.03,0.1,0.3,1,…
正规方程
在梯度下降算法中,我们需要通过迭代一步一步的求出 θ \theta θ 的最优值,而正规方程提供一种求 θ \theta θ 的解析解法,可以一次求解 θ \theta θ 的最优值
为了对这个算法有个直观的了解,我们举个简单的例子,假设
J
(
θ
)
=
α
θ
2
+
b
θ
+
c
J(\theta) = \alpha \theta^2 + b\theta + c
J(θ)=αθ2+bθ+c,假设
θ
\theta
θ 为实数而非向量,要令
J
(
θ
)
J(\theta)
J(θ) 取得最小值,可令
d
d
θ
J
(
θ
)
=
0
\frac{d}{d\theta}J(\theta) = 0
dθdJ(θ)=0 ,求得
θ
\theta
θ 的值
在我们感兴趣的问题中,
θ
\theta
θ 是一个向量而非实数
θ
∈
R
n
+
1
\theta \in \Bbb R^{n+1}
θ∈Rn+1,而代价函数
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
2
J(\theta_0,\theta_1,...,\theta_n) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)} - y^{(i)})^2
J(θ0,θ1,...,θn)=2m1i=1∑m(hθ(x(i)−y(i))2
要使代价函数取得最小值,可令 d d θ j J ( θ ) = 0 \frac{d}{d\theta_j}J(\theta) = 0 dθjdJ(θ)=0,然后计算 θ 0 , θ 1 , . . . , θ n \theta_0,\theta_1,...,\theta_n θ0,θ1,...,θn 的值。但是遍历完所有积分是一件很费事的事情
我们举一个例子来解释正规方程法
下图我们在所有特征前面加一个特征
x
0
=
1
x_0 = 1
x0=1,则
X
∈
R
m
×
(
n
+
1
)
,
y
∈
R
m
X \in \Bbb R^{m \times(n+1)},y \in \Bbb R^m
X∈Rm×(n+1),y∈Rm
令
θ
=
(
X
T
X
)
−
1
X
T
y
\theta = (X^TX)^{-1}X^Ty
θ=(XTX)−1XTy ,便可求得使代价函数取得最小值的
θ
\theta
θ
在一般情况下,假设有 m 个训练样本 ( x ( 1 ) , y ( 1 ) ) , . . . , ( x ( m ) , y ( m ) ) (x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}) (x(1),y(1)),...,(x(m),y(m)),n 个特征
x ( i ) = [ x 0 ( i ) x 1 ( i ) ⋮ x n ( i ) ] ∈ R n + 1 x^{(i)} = \begin{bmatrix} x_0^{(i)}\\ x_1^{(i)}\\ \vdots\\ x_n^{(i)} \end{bmatrix} \in \Bbb R^{n+1} x(i)=⎣⎢⎢⎢⎢⎡x0(i)x1(i)⋮xn(i)⎦⎥⎥⎥⎥⎤∈Rn+1
则 X = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ⋮ ( x ( m ) ) T ] ∈ R m × ( n + 1 ) , θ = ( X T X ) − 1 X T y X = \begin{bmatrix} (x^{(1)})^T\\ (x^{(2)})^T\\ \vdots\\ (x^{(m)})^T\\ \end{bmatrix} \in \Bbb R^{m \times (n+1)},\theta = (X^TX)^{-1}X^Ty X=⎣⎢⎢⎢⎡(x(1))T(x(2))T⋮(x(m))T⎦⎥⎥⎥⎤∈Rm×(n+1),θ=(XTX)−1XTy
在梯度下降算法中,我们提到要进行特征缩放,但是在正规方程中则不需要,即若 x 1 ∈ ( 0 , 1 ) , x 2 ∈ ( 0 , 10000 ) , x 3 ∈ ( 0 , 1 0 − 5 ) x_1 \in (0,1),x_2 \in (0,10000),x_3 \in (0,10^{-5}) x1∈(0,1),x2∈(0,10000),x3∈(0,10−5)也是可以的
梯度下降法和正规方程的优缺点
梯度下降法:
- 优点:
- 当特征数量 n 很多的时候算法性能依然很好
- 缺点:
- 需要选择学习率,并且经过多次尝试
- 需要进行多次迭代
正规方程法:
- 优点:
- 不需要选择学习率
- 不需要进行迭代
- 缺点:
- 计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1,时间复杂度为 O ( n 3 ) O(n^3) O(n3)
- 当特征数量 n 较多时,计算慢
因此,当 n 较小时 (n < 1000 or 10000),正规方程法是一个很好的选择,当 n 较大时,选择梯度下降法