机器学习之多个特征下的梯度下降和正态方程解析
多重特征
具有多个变量的线性回归也称为“多元线性回归”。
现在我们为方程式引入符号,其中可以有任意数量的输入变量。
x
j
(
i
)
=
v
a
l
u
e
o
f
f
e
a
t
u
r
e
j
i
n
t
h
e
i
t
h
t
r
a
i
n
i
n
g
e
x
a
m
p
l
e
x
(
i
)
=
t
h
e
i
n
p
u
t
(
f
e
a
t
u
r
e
s
)
o
f
t
h
e
i
t
h
t
r
a
i
n
i
n
g
e
x
a
m
p
l
e
m
=
t
h
e
n
u
m
b
e
r
o
f
t
r
a
i
n
i
n
g
e
x
a
m
p
l
e
s
n
=
t
h
e
n
u
m
b
e
r
o
f
f
e
a
t
u
r
e
s
\begin{aligned} x_j^{(i)} &= value\,of\,feature\,j\,in\,the\,i^{th}\,training\,example \\ x^{(i)} &= the\,input\,(features)\,of\,the\,i^{th}\,training\,example \\ m &= the\,number\,of\,training\,examples\\ n &= the\,number\,of\,features \end{aligned}
xj(i)x(i)mn=valueoffeaturejintheithtrainingexample=theinput(features)oftheithtrainingexample=thenumberoftrainingexamples=thenumberoffeatures
容纳这些多个特征的假设函数的多元形式如下:
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+\cdots+\theta_{{n}}X_{{n}}
Hθ(x)=θ0+θ1X1+θ2X2+θ3X3+⋯+θnXn
为了开发有关此功能的直觉,我们可以考虑
θ
0
\theta_0
θ0作为房屋的基本价格,
θ
1
\theta_1
θ1作为每平方米的价格,
θ
2
\theta_2
θ2如每层价格等
X
1
X_1
X1将是房屋的平方米数,
X
2
X_2
X2 是楼层数等
使用矩阵乘法的定义,我们的多变量假设函数可以简明表示为:
(
x
)
=
[
θ
0
θ
1
⋯
θ
n
]
[
X
0
X
1
⋮
X
n
]
=
θ
T
X
(x) =[\theta_0\qquad\theta_1\qquad\cdots\qquad\theta_{{n}}]\begin{bmatrix} X_0\\X_1\\\vdots\\X_{{n}} \end{bmatrix}=\theta^{{T}}X
(x)=[θ0θ1⋯θn]⎣⎢⎢⎢⎡X0X1⋮Xn⎦⎥⎥⎥⎤=θTX
这是一个训练示例的假设函数的向量化
备注:请注意,为方便起见,在机器学习中我们假设 x 0 ( i ) = 1 f o r ( i ∈ 1 , … , m ) x_ {0}^{(i)} = 1 \,for\,(i \in {1,\dots,m}) x0(i)=1for(i∈1,…,m)这使我们能够对 θ \theta θ和X进行矩阵运算。因此,使两个向量 θ \theta θ和 X ( i ) X^ {(i)} X(i)逐个匹配。
多个变量的梯度下降
梯度下降方程本身通常是相同的形式。我们只需要针对n个特征重复此操作:
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
:
{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
0
(
i
)
)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
1
(
i
)
)
θ
2
:
=
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
2
(
i
)
)
…
}
\begin{aligned} repeat \,until\,convergence:\{\\ \theta_0 &:= \theta_0 - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})\cdot x_0^{(i)}) \\ \theta_1 &:= \theta_1 - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})\cdot x_1^{(i)}) \\ \theta_2 &:= \theta_2 - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})\cdot x_2^{(i)}) \\ \dots \} \end{aligned}
repeatuntilconvergence:{θ0θ1θ2…}:=θ0−αm1i=1∑m(hθ(x(i)−y(i))⋅x0(i)):=θ1−αm1i=1∑m(hθ(x(i)−y(i))⋅x1(i)):=θ2−αm1i=1∑m(hθ(x(i)−y(i))⋅x2(i))
换一种说法:
r
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
:
{
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
⋅
x
j
(
i
)
)
f
o
r
j
:
=
0
…
n
}
\begin{aligned} repeat \,until\,convergence:\{\\ \theta_j &:= \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})\cdot x_j^{(i)}) \qquad for\,j:=0\dots n\\ \} \end{aligned}
repeatuntilconvergence:{θj}:=θj−αm1i=1∑m(hθ(x(i)−y(i))⋅xj(i))forj:=0…n
下图将具有一个变量的梯度下降与具有多个变量的梯度下降进行比较:
练习I中的梯度下降-特征缩放
我们可以通过将每个输入值设置在大致相同的范围内来加快梯度下降的速度。这是因为θ在小范围内会迅速下降,而在大范围内会缓慢下降,因此当变量非常不均匀时,会无效率地振荡到最佳状态。
防止这种情况的方法是修改输入变量的范围,以使它们都大致相同。理想情况下:
−
1
≤
x
(
i
)
≤
1
o
r
−
0.5
≤
x
(
i
)
≤
0.5
-1\leq x_{(i)}\leq1\\ or \\ -0.5\leq x_{(i)}\leq 0.5
−1≤x(i)≤1or−0.5≤x(i)≤0.5
这些不是确切的要求;我们只是试图加快速度。目标是使所有输入变量大致进入这些范围之一,给出或取几个。
有助于此的两种技术是特征缩放和均值归一化。特征缩放涉及将输入值除以输入变量的范围(即最大值减去最小值),从而得到的新范围仅为1。请按照以下公式调整输入值:
x
i
:
=
x
i
−
μ
i
s
i
x_i:=\frac{x_i-\mu_i}{s_i}
xi:=sixi−μi
μ
i
\mu_i
μi是特征(i)的所有值的平均值,并且
s
i
s_i
si是值的范围(最大值-最小值),或
s
i
s_i
si是标准偏差。
请注意,除以范围或除以标准偏差会得出不同的结果。测验使用标准偏差。
例如,如果
x
i
x_i
xi表示价格范围为100至2000,平均值为1000的房价,
x
i
:
=
p
r
i
c
e
−
1000
1900
x_i:=\frac{price - 1000}{1900}
xi:=1900price−1000
练习II中的梯度下降-学习率
调试梯度下降。绘制一个在x轴上具有迭代次数的图。现在在梯度下降的迭代次数上绘制成本函数J(θ)。如果J(θ)增大,则可能需要减小 α \alpha α。
自动收敛测试。如果在一次迭代中J(θ)的减小量小于E,则声明收敛,其中E是一些小值,例如
1
0
−
3
10^{−3}
10−3。但是,实际上很难选择此阈值。
已经证明,如果学习率α足够小,则J(θ)将在每次迭代中减小。
总结一下:
如果 α \alpha α 太小:收敛缓慢。
如果 α \alpha α 太大:可能不会在每次迭代中都减小,因此可能不会收敛。
特征和多项式回归
我们可以通过几种不同的方式来改进我们的特征和假设函数的形式。
我们可以将多个功能组合为一个。例如,我们可以结合 x 1 x_1 x1和 x 2 x_2 x2变成特征 x 3 x_3 x3 通过采取 x 1 ⋅ x 2 . x_1\cdot x_2. x1⋅x2.
多项式回归
如果我们的假设函数不太适合数据,则不必是线性的(直线)。
我们可以通过将其设为二次,三次或平方根函数(或任何其他形式)来更改假设函数的行为或曲线。
例如,如果我们的假设函数是
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
h_\theta(x)=\theta_0+\theta_1x_1
hθ(x)=θ0+θ1x1然后我们可以基于
x
1
x_1
x1,得到二次函数
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
1
2
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1^2
hθ(x)=θ0+θ1x1+θ2x12或三次函数
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
1
2
+
θ
3
x
1
3
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1^2+\theta_3x_1^3
hθ(x)=θ0+θ1x1+θ2x12+θ3x13
在三次版本中,我们创建了新变量
x
2
x_2
x2和
x
3
x_3
x3,
x
2
=
x
1
2
a
n
d
x
3
=
x
1
3
x_2=x_1^2\,and\,x_3=x_1^3
x2=x12andx3=x13
要使其平方根函数,我们可以这样做:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
1
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2\sqrt{x_1}
hθ(x)=θ0+θ1x1+θ2x1
要记住的一件事是,如果以这种方式选择要素,则要素缩放变得非常重要。
例如。如果 x 1 x_1 x1范围为1-1000,则范围为 x 1 2 x_1 ^ 2 x12 变成1-1000000,而 x 1 3 x_1 ^ 3 x13变成1-1000000000
正态方程
梯度下降提供了一种最小化
J
J
J的方法。让我们讨论这样做的第二种方法,这一次显式地执行最小化,而不求助于迭代算法。在“正态方程”方法中,我们将通过明确地针对
θ
j
θ_j
θj取导数并将其设置为零来最小化
J
J
J。这使我们无需迭代即可找到最佳
θ
\theta
θ。正态方程公式如下:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
用正态方程的话就没必要使用特征缩放。
以下是梯度下降与正态方程的比较:
梯度下降 | 正态方程 |
---|---|
需要选择 α \alpha α | 无需选择 α \alpha α |
需要多次迭代 | 无需迭代 |
O ( k n 2 ) O(kn^2) O(kn2) | O ( n 3 ) O(n^3) O(n3)需要计算 X T X X^TX XTX |
当n大时效果好 | 当n大时速度慢 |
利用正态方程,计算具有 O ( n 3 ) O(n^3) O(n3)复杂性。因此,如果我们具有大量特征,则正态方程很慢,n超过10,000时,可能是从正态解转到梯度下降的好时机。
正规方程不可逆
当正规方程 X T X X^TX XTX不可逆的时候,在编程时可以使用pinv函数代替inv函数,它会返回你一个 θ \theta θ。
如果
X
T
X
X^TX
XTX是不可逆的,常见原因可能是:
1、冗余特征,其中两个特征密切相关(即,它们线性相关)
2、特征过多(例如m≤n)。在这种情况下,删除某些功能或使用“正则化”。
解决上述问题的方法包括删除与另一个线性相关的特征,或者在特征过多时删除一个或多个特征。