机器学习笔记(吴恩达)(二)--多变量线性回归
个人blog https://verbf.github.io
本篇介绍了有关在多特征的情况下如何使用线性回归,以及一些相关的技巧。
场景描述
在多数时候我们的特征并不会只有一个。在预测房价的例子中,除了房屋的面积之外,房屋的房间数,楼层,房屋的年龄等也可以用于房价的预测。
面积( x 1 x_1 x1) | 房间数( x 2 x_2 x2) | 楼层( x 3 x_3 x3) | 房屋年龄( x 4 x_4 x4) | 价格(y) |
---|---|---|---|---|
2101 | 3 | 2 | 20 | 460 |
1236 | 3 | 1 | 40 | 232 |
1514 | 2 | 2 | 50 | 315 |
符号注释 :
n : 特征的数量
x
(
i
)
x^{(i)}
x(i) : 第i个训练样本的特征向量
x
j
(
i
)
x^{(i)}_j
xj(i) : 第i个训练样本的第j个特征值
例 :
x ( 2 ) = [ 1236 3 1 40 ] x 3 ( 2 ) = 1 x^{(2)} = \begin{bmatrix} 1236 \\ 3 \\ 1 \\ 40 \end{bmatrix} \qquad x_3^{(2)} =1 x(2)=⎣⎢⎢⎡12363140⎦⎥⎥⎤x3(2)=1
假设函数
因为特征的数量增加,假设函数也做出了相应的变化
h
Θ
(
x
)
=
Θ
0
+
Θ
1
x
1
+
Θ
2
x
2
+
Θ
3
x
3
+
.
.
.
+
Θ
n
x
n
h_\Theta(x) = \Theta_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n
hΘ(x)=Θ0+Θ1x1+Θ2x2+Θ3x3+...+Θnxn
为了书写的方便,我们定义一个
x
0
=
1
\quad x_0=1 \quad
x0=1 即
(
x
0
(
i
)
=
1
)
(x_0^{(i)}=1)
(x0(i)=1)
于是我们有 :
h
Θ
(
x
)
=
Θ
0
x
1
+
Θ
1
x
1
+
Θ
2
x
2
+
Θ
3
x
3
+
.
.
.
+
Θ
n
x
n
h_\Theta(x) = \Theta_0x_1 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n
hΘ(x)=Θ0x1+Θ1x1+Θ2x2+Θ3x3+...+Θnxn
为进一步简化这个表达式,我们使用向量的方式来表示 :
X = [ x 0 x 1 x 2 x 3 . . . x n ] Θ = [ Θ 0 Θ 1 Θ 2 Θ 3 . . . Θ n ] X=\begin{bmatrix} x_0\\x_1\\x_2\\x_3\\...\\x_n \end{bmatrix} \qquad \Theta=\begin{bmatrix} \Theta_0\\\Theta_1\\\Theta_2\\\Theta_3\\...\\\Theta_n \end{bmatrix} X=⎣⎢⎢⎢⎢⎢⎢⎡x0x1x2x3...xn⎦⎥⎥⎥⎥⎥⎥⎤Θ=⎣⎢⎢⎢⎢⎢⎢⎡Θ0Θ1Θ2Θ3...Θn⎦⎥⎥⎥⎥⎥⎥⎤
h Θ ( x ) = Θ 0 x 0 + Θ 1 x 1 + Θ 2 x 2 + Θ 3 x 3 + . . . + Θ n x n ⎵ Θ T X h_\Theta(x) = \underbrace{ \Theta_0x_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n}_{\Theta^TX} hΘ(x)=ΘTX Θ0x0+Θ1x1+Θ2x2+Θ3x3+...+Θnxn
⇓ \Huge\Downarrow ⇓
h Θ ( x ) = Θ T X h_\Theta(x) = \Theta^TX hΘ(x)=ΘTX
代价函数
J ( Θ ) = 1 2 m ∑ i = 1 m ( h Θ ( x ( i ) ) − y ( i ) ) J(\Theta) = \frac{1}{2m}\sum_{i=1}^m(h_\Theta(x^{(i)}) - y^{(i)}) J(Θ)=2m1i=1∑m(hΘ(x(i))−y(i))
梯度下降
R e p e a t { Θ j = Θ j − α ∂ ∂ Θ j J ( Θ 0 , . . . , Θ n ) } Repeat\left\{ \Theta_j = \Theta_j - \alpha\frac{\partial}{\partial\Theta_j}J(\Theta_0,...,\Theta_n) \right\} Repeat{Θj=Θj−α∂Θj∂J(Θ0,...,Θn)}
需要注意的是,这里的 Θ j \Theta_j Θj需要同步更新
同步更新 | 异步更新 |
---|---|
temp0 =
α
∂
∂
Θ
0
J
(
Θ
0
,
.
.
.
,
Θ
n
)
\alpha\frac{\partial}{\partial\Theta_0}J(\Theta_0,...,\Theta_n)
α∂Θ0∂J(Θ0,...,Θn) temp1 = α ∂ ∂ Θ 1 J ( Θ 0 , . . . , Θ n ) \alpha\frac{\partial}{\partial\Theta_1}J(\Theta_0,...,\Theta_n) α∂Θ1∂J(Θ0,...,Θn) Θ 0 \Theta_0 Θ0 = temp0 Θ 1 \Theta_1 Θ1 = temp1 | temp0 =
α
∂
∂
Θ
0
J
(
Θ
0
,
.
.
.
,
Θ
n
)
\alpha\frac{\partial}{\partial\Theta_0}J(\Theta_0,...,\Theta_n)
α∂Θ0∂J(Θ0,...,Θn) Θ 0 \Theta_0 Θ0 = temp0 temp1 = α ∂ ∂ Θ 1 J ( Θ 0 , . . . , Θ n ) \alpha\frac{\partial}{\partial\Theta_1}J(\Theta_0,...,\Theta_n) α∂Θ1∂J(Θ0,...,Θn) Θ 1 \Theta_1 Θ1 = temp1 |
特征缩放(Feature Scaling)
确保特征的数值大小在相似的规模下,这样梯度下降法可以更快的收敛。
在做特征缩放时并不需要太精确,只是为了使梯度下降法能更快的收敛。
缩放前 | 缩放后 |
---|---|
x 1 = s i z e ( 0 − 2000 f e e t 2 ) x_1 = size(0-2000 feet^2) x1=size(0−2000feet2) | x 1 = s i z e ( f e e t 2 ) 2000   ( 0 ≤ x 1 ≤ 1 ) x_1 = \frac{size(feet^{2})}{2000} \,(0\leq x_1 \leq 1) x1=2000size(feet2)(0≤x1≤1) |
x 2 = n u m b e r   o f   b e d r o o m s ( 1 − 5 ) x_2=number \, of \, bedrooms(1-5) x2=numberofbedrooms(1−5) | x 1 = n u m   o f   b e d r o o m s 5   ( 0 ≤ x 2 ≤ 1 ) x_1 = \frac{num \, of \, bedrooms}{5} \,(0\leq x_2 \leq 1) x1=5numofbedrooms(0≤x2≤1) |
均值归一化(Mean normalization)
特征缩放的一种方法
x
1
⇒
x
1
−
μ
1
S
1
x_1 \Rightarrow \frac{x_1 - \mu_1}{S_1}
x1⇒S1x1−μ1
μ
1
\mu_1
μ1 表示训练集中特征
x
1
x_1
x1的平均值
S
1
S_1
S1 表示该特征值的范围(max - min)
多项式回归
多项式回归就是用线性回归的方式去拟合更复杂的函数,甚至是非线性的函数。
特征选择
如图所示,我们有两个特征,房子的临街宽度和垂直深度。但我们通常使用面积来表示房屋的大小。所以我们可以使用房屋的面积(临街宽度 x 垂直深度)作为一个特征。
拟合多项式
对于下图中的数据集,我们继续使用一次函数来拟合的话,效果并不太好。
如果使用二次函数来拟合的话,效果可能也不是特别好,因为我们知道,二次函数的图像(图中蓝色的线)在后面是一个下降的趋势,然而现实中房价并不会随着房屋面积的增加而减少。
所以这里我们可以使用三次函数(图中绿色的线)来拟合。
我们只要做一些简单的修改就可以将线性回归应用到多项式上。
h
Θ
(
x
)
=
Θ
0
+
Θ
1
x
1
+
Θ
2
x
2
+
Θ
3
x
3
h_\Theta(x)=\Theta_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3
hΘ(x)=Θ0+Θ1x1+Θ2x2+Θ3x3
⇓
\huge\Downarrow
⇓
h
Θ
(
x
)
=
Θ
0
+
Θ
1
s
i
z
e
+
Θ
2
(
s
i
z
e
)
2
+
Θ
3
(
s
i
z
e
)
3
h_\Theta(x)=\Theta_0 + \Theta_1size + \Theta_2(size)^2 + \Theta_3(size)^3\\
hΘ(x)=Θ0+Θ1size+Θ2(size)2+Θ3(size)3
我们令
x
1
=
(
s
i
z
e
)
x
2
=
(
s
i
z
e
)
2
x
3
=
(
s
i
z
e
)
3
x_1=(size)\\ x_2=(size)^2\\ x_3=(size)^3
x1=(size)x2=(size)2x3=(size)3
即可。
需要强调的是,在这种情况下特征缩放就显得尤为重要。
检验方法
我们如何判断梯度下降法是否正常工作呢?
通常可以观察代价函数的值与迭代次数的关系来判断。
当梯度下降法正常运行时,如下图所示,随着迭代次数的增加,代价函数的值越来越小,当梯度下降算法迭代60次左右时,代价函数的值几乎不再变化,说明此时算法已经收敛。
当出现以下两种情况时,代价函数的值上下震荡,或是逐渐变大,这都说明梯度下降法并没有正常工作。
通常出现这两种情况的原因都是学习率
α
\alpha
α 过大。
学习率选择
总的来说学习率过小的话,会导致收敛过慢
而学习率过大的话,可能导致无法收敛,代价函数
J
(
Θ
)
J(\Theta)
J(Θ) 并不会在每次迭代之后都下降。
我们可以通过多次试验的方式找出合适的学习率值的大小。
另:按照吴恩达老师的推荐,我们可以如下依次选择学习率的大小。
… 0.001,0.03,0.1,0.3 …
正规方程
正规方程可以让我们再某些情况下,更快的求解出参数
Θ
\Theta
Θ。
假设我们有m个样本,
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
.
.
.
,
(
x
(
n
)
,
y
(
n
)
)
(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(n)},y^{(n)})
(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n)) ,n 个特征。
我们将单个样本的特征写成向量形式,再将所有的向量转置后,写成矩阵形式。
{% raw %}
x
(
i
)
=
[
x
0
(
i
)
x
1
(
i
)
x
3
(
i
)
.
.
.
x
n
(
i
)
]
X
=
[
−
−
−
(
x
(
1
)
)
T
−
−
−
−
−
−
(
x
(
2
)
)
T
−
−
−
−
−
−
(
x
(
3
)
)
T
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
(
x
(
m
)
)
T
−
−
−
]
⎵
m
∗
(
n
+
1
)
x_{(i)} = \begin{bmatrix} x_0^{(i)} \\ x_1^{(i)} \\ x_3^{(i)} \\ ... \\ x_n^{(i)} \end{bmatrix} \qquad X = \underbrace{\begin{bmatrix} ---(x^{(1)})^T---\\ ---(x^{(2)})^T---\\ ---(x^{(3)})^T---\\ ---------\\ ---(x^{(m)})^T---\\ \end{bmatrix}}_{m * (n+1)}
x(i)=⎣⎢⎢⎢⎢⎢⎡x0(i)x1(i)x3(i)...xn(i)⎦⎥⎥⎥⎥⎥⎤X=m∗(n+1)
⎣⎢⎢⎢⎢⎡−−−(x(1))T−−−−−−(x(2))T−−−−−−(x(3))T−−−−−−−−−−−−−−−(x(m))T−−−⎦⎥⎥⎥⎥⎤
{% endraw %}
接着,只要求解如下这个矩阵表达式,就可得到参数
Θ
\Theta
Θ的值
Θ
=
(
X
T
X
)
−
1
X
T
y
\Theta = (X^TX)^{-1}X^Ty
Θ=(XTX)−1XTy
在上式中需要对矩阵求逆,那么如果矩阵不可逆呢?
一般来说,大部分矩阵都是可逆的,出现了以下两种情况时,会导致矩阵不可逆:
-
多余特征
如下所示,显然 x 1 x_1 x1和 x 2 x_2 x2两个特征是线性相关的,那么这时就会导致矩阵不可逆
x 1 = s i z e i n f e e t 2 x 2 = s i z e i n m 2 x_1 = size \ in \ feet^2 \\ x_2 = size \ in \ m^2 x1=size in feet2x2=size in m2 -
太多特征
如果我们的特征数量较多,而样本数量较少,造成特征数量大于样本数量,这种情况下也会导致矩阵不可逆。例如,生物信息学的基因芯片数据中常有成千上万个属性,但往往只有几十,上百个样例。
正规方程与梯度下降法比较
梯度下降 | 正规方程 | ||
---|---|---|---|
缺点 | 需要多次迭代 需要选择学习率 | 优点 | 不需要多次迭代 不需要选择学习率 |
优点 | 当特征数量n很大时, 也能运行的很好 | 缺点 | 当特征数量n较大时, 速度很慢 |
吴恩达老师推荐,当n大于10000时选择梯度下降法,小于10000时选择正规方程法。