文章目录
- 4.多变量线性回归(Linear Regression with Multiple Variables)
- 4.1 多维特征(Multiple Features)
- 4.2 多变量梯度下降(Gradient Descent for Multiple Variables)
- 4.3 梯度下降算法实践I-特征缩放(Gradient Descent in Practice I - Feature Scaling)
- 4.4 梯度下降法实践II-学习率(Gradient Descent in Practice II - Learning Rate)
- 4.5 特征和多项式回归(Features and Polynomial Regression)
- 4.6 正规方程(Normal Equation)
- 4.7 正规方程遇到不可逆性情况(Normal Equation Noninvertibility)
4.多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征(Multiple Features)
对前面的房价模型增加更多特征:卧室数量、楼层数、房屋年龄,构成一个含有多个变量的模型,使用
(
x
1
,
x
2
,
…
,
x
n
)
(x_1,x_2,\dots,x_n)
(x1,x2,…,xn)表示其特征。
注释:
n
n
n:特征的数量。
x
(
i
)
x^{(i)}
x(i):第
i
i
i个训练样本的输入特征向量(vector),即特征矩阵中的第
i
i
i行。
x
j
(
i
)
x_j^{(i)}
xj(i):第
i
i
i个训练样本中的第
j
j
j个特征值。
多变量线性回归的假设
h
h
h为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n
hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn
为了表示方便,定义一个额外的特征量
x
0
=
1
x_0=1
x0=1,则特征向量表示为:
X
=
[
x
0
x
1
x
2
⋮
x
n
]
∈
R
n
+
1
X=\left[\begin{matrix} x_0\\ x_1\\ x_2\\ \vdots\\ x_n\\ \end{matrix}\right]\in \R^{n+1}
X=⎣⎢⎢⎢⎢⎢⎡x0x1x2⋮xn⎦⎥⎥⎥⎥⎥⎤∈Rn+1
参数向量表示为:
θ
=
[
θ
0
θ
1
θ
2
⋮
θ
n
]
∈
R
n
+
1
\theta=\left[\begin{matrix} \theta_0\\ \theta_1\\ \theta_2\\ \vdots\\ \theta_n\\ \end{matrix}\right]\in \R^{n+1}
θ=⎣⎢⎢⎢⎢⎢⎡θ0θ1θ2⋮θn⎦⎥⎥⎥⎥⎥⎤∈Rn+1
假设
h
h
h表示为:
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+\dots +\theta_nx_n
hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
进一步可简化为:
h
θ
(
x
)
=
θ
T
X
h_\theta(x)=\theta^TX
hθ(x)=θTX
4.2 多变量梯度下降(Gradient Descent for Multiple Variables)
由前面可知,多变量线性回归的假设为:
h
θ
(
x
)
=
θ
T
X
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
h_\theta(x)=\theta^TX=\theta_0x_0+\theta_1x_1+\theta_2x_2+\dots +\theta_nx_n
hθ(x)=θTX=θ0x0+θ1x1+θ2x2+⋯+θnxn
参数为
n
+
1
n+1
n+1维向量:
θ
\theta
θ
与单变量线性回归类似,代价函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
梯度下降算法:
Repeat {
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\qquad\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)\quad
θj:=θj−α∂θj∂J(θ)}
求导后结果为:
Repeat {
θ
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}\Bigl(\bigl(h_\theta(x^{(i)})-y^{(i)}\bigr)·x^{(i)}_j)
θj:=θj−αm1i=1∑m((hθ(x(i))−y(i))⋅xj(i))}
注意所有的
θ
j
\theta_j
θj要同步更新。
4.3 梯度下降算法实践I-特征缩放(Gradient Descent in Practice I - Feature Scaling)
实践中,要保证所有特征都在相近的尺度上。
例如:
上图是以
θ
1
,
θ
2
\theta_1,\theta_2
θ1,θ2参数为横纵坐标的代价函数
J
(
θ
)
J(\theta)
J(θ)的等高线图。由于特征
x
1
,
x
2
x_1,x_2
x1,x2的取值范围相差较大,因此会让图像非常瘦长。
在梯度下降过程中,可能会反复震荡,需要很长的时间才能收敛到全局最小值。
在这种情况下,通常应将所有特征的尺度缩放,接近到-1到1之间,这个范围并非绝对的限制,特征范围在-3到3,-1/3到1/3都是可以接受的,只要注意不能太大或者太小就可以了,不用太精确。最终的目的只是为了让梯度下降运行的更快。
均值归一化:
令
x
j
=
x
j
−
μ
j
s
j
x_j=\frac{x_j-\mu_j}{s_j}
xj=sjxj−μj
x
j
x_j
xj:第
j
j
j个特征。
μ
j
\mu_j
μj:训练集中特征
x
j
x_j
xj的总体均值。
s
j
s_j
sj:特征值
x
j
x_j
xj的范围,即最大值减最小值。也可以设置为标准差。
标准差公式:
s
j
=
1
n
∑
i
=
1
m
(
x
j
(
i
)
−
μ
j
)
2
s_j=\sqrt{\frac{1}{n}\sum_{i=1}^m(x^{(i)}_j - \mu_j)^2}
sj=n1i=1∑m(xj(i)−μj)2
4.4 梯度下降法实践II-学习率(Gradient Descent in Practice II - Learning Rate)
可以通过绘制代价函数
J
(
θ
)
J(\theta)
J(θ)(y轴)与迭代次数(x轴)的图来观察何时收敛。
另外一种方法是自动收敛测试:选择一个合适的阈值与代价函数的变化值比较来判断是否收敛,但实践中选择合适的阈值非常困难。因此还是看图更好,而且看图还可以根据
J
(
θ
)
J(\theta)
J(θ)值是否随着迭代持续减小来判断梯度下降是否运行正常。
如果 J ( θ ) J(\theta) J(θ)在上升,通常的解决方法是选择一个更小的 α \alpha α(学习率)值。但是不能太小,否则收敛速度会太慢。
可以尝试对
α
\alpha
α取下面的值:
…
,
0.001
,
0.003
,
0.01
,
0.03
,
0.1
,
0.3
,
1
,
…
\dots,0.001,0.003,0.01,0.03,0.1,0.3,1,\dots
…,0.001,0.003,0.01,0.03,0.1,0.3,1,…
4.5 特征和多项式回归(Features and Polynomial Regression)
对于房价预测问题,假设有两个特征:房子的临街宽度 x 1 = f r o n t a g e x_1=frontage x1=frontage,和纵向宽度 x 2 = d e p t h x_2=depth x2=depth。
对应的假设函数为:
h
θ
(
x
)
=
θ
0
+
θ
1
×
f
r
o
n
t
a
g
e
+
θ
2
×
d
e
p
t
h
h_\theta(x)=\theta_0 + \theta_1\times frontage + \theta_2 \times depth
hθ(x)=θ0+θ1×frontage+θ2×depth
当运用线性回归时,并不一定非要直接用这两个特征,可以根据实际需求创造新的特征。有时定义新的特征可能会得到一个更好的模型。
此处创造一个新的面积特征,
x
=
f
r
o
n
t
a
g
e
×
d
e
p
t
h
x=frontage\times depth
x=frontage×depth
此时的假设函数为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_\theta(x)=\theta_0 + \theta_1x
hθ(x)=θ0+θ1x
与选择特征密切相关的一个概念是多项式回归。
例如有上面这样一个房屋价格数据集,可能会有多个不同的模型用于拟合。观察数据,直线似乎不能很好的拟合这些数据,需要用曲线来拟合,所以可能想到用一个二次方模型拟合,如:
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h_\theta(x)=\theta_0 + \theta_1x+\theta_2x^2
hθ(x)=θ0+θ1x+θ2x2
但是一个二次函数最终会降下来,房屋价格却不会随着面积的增加减小。
此时再尝试使用一个三次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
h_\theta(x)=\theta_0 + \theta_1x+\theta_2x^2+\theta_3x^3
hθ(x)=θ0+θ1x+θ2x2+θ3x3
我们可以对上面的模型做一个简单的修改来转换为多元线性回归模型,令:
x
1
=
(
s
i
z
e
)
x_1=(size)
x1=(size)
x
2
=
(
s
i
z
e
)
2
x_2=(size)^2
x2=(size)2
x
3
=
(
s
i
z
e
)
3
x_3=(size)^3
x3=(size)3
那么:
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
如此一来,特征缩放就很重要了。
除了三次方模型外,可能还有很多其他的选择,例如:
h
θ
(
x
)
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
(
s
i
z
e
)
h_\theta(x)=\theta_0 + \theta_1(size)+\theta_2\sqrt{(size)}
hθ(x)=θ0+θ1(size)+θ2(size)
根据对平方根函数图像的了解,以及对数据形状的了解,通过选择不同的特征,有时可以得到更好的模型。
4.6 正规方程(Normal Equation)
对于某些线性回归问题,正规方程解法可能是求得参数
θ
\theta
θ最优值的更好方法。
正规方程中,为求得使代价函数
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
最小的
θ
∈
R
n
+
1
\theta\in \R^{n+1}
θ∈Rn+1,通常会这样做:
对所有的
θ
j
\theta_j
θj分别求偏导,令其结果为0
∂
∂
θ
j
J
(
θ
)
=
⋯
=
0
\frac{\partial}{\partial\theta_j}J(\theta)=\dots=0
∂θj∂J(θ)=⋯=0
求得最优
θ
0
,
θ
1
,
…
,
θ
n
\theta_0,\theta_1,\dots,\theta_n
θ0,θ1,…,θn。
但是求出所有的偏微分会很久,并且最终会很复杂。
有另外一种利用正规方程解出
θ
\theta
θ的方法。
假设有下面四个训练样本:
为其加上一组额外的特征
x
0
=
1
x_0=1
x0=1
将所有样本的特征值放在一起构造成一个
m
×
(
n
+
1
)
m\times (n+1)
m×(n+1)的特征矩阵;将所有
y
y
y值作为一个
m
m
m维向量(
m
m
m是样本数,
(
n
+
1
)
(n+1)
(n+1)是特征数)。
将矩阵
X
X
X和向量
y
y
y代入公式:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
即可求得使得代价函数最小化的
θ
\theta
θ。
梯度下降与正规方程对比:
梯度下降 | 正规方程 |
---|---|
通常需要特征缩放 | 无需特征缩放 |
需要选择学习率 α \alpha α | 无需选择学习率 α \alpha α |
需要多次迭代 | 无需迭代,一次算出 |
n(特征量)很大时,即使上百万,依然能很好的运行 | 需要计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1, ( X T X ) (X^TX) (XTX)的结果是 n × n n\times n n×n阶矩阵,计算逆矩阵的时间复杂度是 O ( n 3 ) O(n^3) O(n3),因此当n很大时,计算会非常慢。通常 n < 10000 n<10000 n<10000时可以接受 |
适用于各种算法 | 不适用除线性回归外的其他算法 |
4.7 正规方程遇到不可逆性情况(Normal Equation Noninvertibility)
计算 θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy时, X T X X^TX XTX结果可能会不可逆(很少发生)。我们称那些不可逆矩阵为奇异或退化矩阵。
Octave中可以用pinv()方法求伪逆,即使不可逆也会得到一个正常的解。Python中对应的方法是numpy.linalg.pinv()。
正常的求逆方法是inv(),Python中对应的是numpy.linalg.inv()。
导致 X T X X^TX XTX不可逆的原因:
-
第一个可能的原因是学习问题中有冗余的特征,例如:
x 1 x_1 x1是以平方米为单位的房屋面积, x 2 x_2 x2是以平方尺为单位的房屋面积。
x 1 = x 2 × ( 3.28 ) 2 x_1=x_2\times (3.28)^2 x1=x2×(3.28)2
解决方法是删除掉冗余的特征。 -
第二个可能的原因是用了太多的特征,导致特征数 n n n大于样本数 m m m,解决方法是删掉一些特征,或者使用正则化(后面讲)的方法。