自己简略的, 有参考黄海广前辈 !黄博士GitHub
第2周
四、多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征
参考视频: 4 - 1 - Multiple Features
现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为
(
x
1
,
x
2
,
.
.
.
,
x
n
)
\left( {x_{1}},{x_{2}},...,{x_{n}} \right)
(x1,x2,...,xn)。
引入一系列新的注释:
n
n
n 代表特征的数量
x
(
i
)
{x^{\left( i \right)}}
x(i)代表第
i
i
i 个训练实例,是特征矩阵中的第
i
i
i行,是一个向量(vector)。
比方说,上图的
x
(
2
)
=
[
1416
3
2
40
]
{x}^{(2)}\text{=}\begin{bmatrix} 1416\\\ 3\\\ 2\\\ 40 \end{bmatrix}
x(2)=⎣⎢⎢⎡1416 3 2 40⎦⎥⎥⎤,
x
j
(
i
)
{x}_{j}^{\left( i \right)}
xj(i)代表特征矩阵中第
i
i
i 行的第
j
j
j 个特征,也就是第
i
i
i 个训练实例的第
j
j
j 个特征。
如上图的
x
2
(
2
)
=
3
,
x
3
(
2
)
=
2
x_{2}^{\left( 2 \right)}=3,x_{3}^{\left( 2 \right)}=2
x2(2)=3,x3(2)=2,
支持多变量的假设
h
h
h 表示为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}
hθ(x)=θ0+θ1x1+θ2x2+...+θnxn,
这个公式中有
n
+
1
n+1
n+1个参数和
n
n
n个变量,为了使得公式能够简化一些,引入
x
0
=
1
x_{0}=1
x0=1,则公式转化为:
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}
hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
此时模型中的参数是一个
n
+
1
n+1
n+1维的向量,任何一个训练实例也都是
n
+
1
n+1
n+1维的向量,特征矩阵
X
X
X的维度是
m
∗
(
n
+
1
)
m*(n+1)
m∗(n+1)。 因此公式可以简化为:
h
θ
(
x
)
=
θ
T
X
h_{\theta} \left( x \right)={\theta^{T}}X
hθ(x)=θTX,其中上标
T
T
T代表矩阵转置。
4.2 多变量梯度下降
参考视频: 4 - 2 - Gradient Descent for Multiple Variables
多变量线性回归中,也构建一个代价函数,是所有建模误差的平方和,即:
J
(
θ
0
,
θ
1
.
.
.
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}
J(θ0,θ1...θn)=2m1i=1∑m(hθ(x(i))−y(i))2 ,
其中:
h
θ
(
x
)
=
θ
T
X
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_{\theta}\left( x \right)=\theta^{T}X={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}
hθ(x)=θTX=θ0+θ1x1+θ2x2+...+θnxn ,
目标和单变量线性回归问题中一样,找出使得代价函数最小的一系列参数。
多变量线性回归的批量梯度下降算法为:
当
n
>
=
1
n>=1
n>=1时,
θ
0
:
=
θ
0
−
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
{{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}
θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))x0(i)
θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) {{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)} θ1:=θ1−am1i=1∑m(hθ(x(i))−y(i))x1(i)
θ
2
:
=
θ
2
−
a
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
2
(
i
)
{{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)}
θ2:=θ2−am1i=1∑m(hθ(x(i))−y(i))x2(i)
开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
4.3 梯度下降法实践1-特征缩放
参考视频: 4 - 3 - Gradient Descent in Practice I - Feature Scaling
面对多维特征问题的时候,保证特征具有相近的尺度,将帮助梯度下降算法更快地收敛。
以房价问题为例,假设我们使用两个特征,房屋尺寸和房间数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是将所有特征的尺度都尽量缩放到-1到1之间。如图:
可以令:
x
n
=
x
n
−
μ
n
s
n
{{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}}
xn=snxn−μn,其中
μ
n
{\mu_{n}}
μn是平均值,
s
n
{s_{n}}
sn是标准差。
4.4 梯度下降法实践2-学习率
参考视频: 4 - 4 - Gradient Descent in Practice II - Learning Rate
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,不能提前预知,可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛:
也有其他测试是否收敛的方法,如将代价函数的变化值与某个阀值(例如0.001)进行比较。
梯度下降算法的每次迭代受学习率影响,如果学习率
a
a
a过小,则达到收敛所需迭代次数会非常高;如果学习率
a
a
a过大,迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛,甚至发散。
通常可以考虑尝试些学习率:
α
=
0.01
,
0.03
,
0.1
,
0.3
,
1
,
3
,
10
\alpha=0.01,0.03,0.1,0.3,1,3,10
α=0.01,0.03,0.1,0.3,1,3,10
4.5 特征和多项式回归
参考视频: 4 - 5 - Features and Polynomial Regression
如房价预测问题:
h
θ
(
x
)
=
θ
0
+
θ
1
×
f
r
o
n
t
a
g
e
+
θ
2
×
d
e
p
t
h
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}\times{frontage}+{\theta_{2}}\times{depth}
hθ(x)=θ0+θ1×frontage+θ2×depth
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(纵向深度),
x
=
f
r
o
n
t
a
g
e
∗
d
e
p
t
h
=
a
r
e
a
x=frontage*depth=area
x=frontage∗depth=area(面积),则:
h
θ
(
x
)
=
θ
0
+
θ
1
x
{h_{\theta}}\left( x \right)={\theta_{0}}+{\theta_{1}}x
hθ(x)=θ0+θ1x。
线性回归并不适用所有数据,有时需要曲线来拟合数据,比如一个二次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}
hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
+
θ
3
x
3
3
h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}
hθ(x)=θ0+θ1x1+θ2x22+θ3x33
通常需要观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令:
x
2
=
x
2
2
,
x
3
=
x
3
3
{{x}_{2}}=x_{2}^{2},{{x}_{3}}=x_{3}^{3}
x2=x22,x3=x33,从而将模型转化为线性回归模型。
根据函数图形特性,我们还可以使:
h
θ
(
x
)
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
(
s
i
z
e
)
2
{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta}_{2}}{{(size)}^{2}}
hθ(x)=θ0+θ1(size)+θ2(size)2
或者:
h
θ
(
x
)
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
s
i
z
e
{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta }_{2}}\sqrt{size}
hθ(x)=θ0+θ1(size)+θ2size
注:如果采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
4.6 正规方程
参考视频: 4 - 6 - Normal Equation
对于某些线性回归问题,正规方程方法会更好。如:
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
∂
∂
θ
j
J
(
θ
j
)
=
0
\frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0
∂θj∂J(θj)=0 。
假设我们的训练集特征矩阵为
X
X
X(包含了
x
0
=
1
{{x}_{0}}=1
x0=1)并且我们的训练集结果为向量
y
y
y,则利用正规方程解出向量
θ
=
(
X
T
X
)
−
1
X
T
y
\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y
θ=(XTX)−1XTy 。
上标T代表矩阵转置,上标-1 代表矩阵的逆。设矩阵
A
=
X
T
X
A={X^{T}}X
A=XTX,则:
(
X
T
X
)
−
1
=
A
−
1
{{\left( {X^T}X \right)}^{-1}}={A^{-1}}
(XTX)−1=A−1
总结:只要特征变量的数目不大,标准方程是一个很好的计算参数
θ
\theta
θ的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
当我们讲到分类算法,像逻辑回归算法,并不能使用标准方程法。