多元变量的情形
多元变量情况下的标号
在之前的研究中,我们研究房屋价格和房屋面积的关系,这种情况下仅有房屋价格一个自变量。
现在,我们引入其它变量,因为一个房子的售价不仅与房屋面积有关,还与房屋年龄,卧室数目,层数等因素有关。
将四个特征量分别命名为
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4(由于特征量有四个,因此n = 4),房屋价格仍为
y
y
y。
我们一共有47个样本,因此样本数量m = 47。
使用
x
(
i
)
x^{(i)}
x(i)来表示第i个样本的特征值所组成的列向量,如:
x
(
2
)
=
[
1416
3
2
40
]
x^{(2)} = \begin{bmatrix} 1416\\ 3 \\ 2 \\40 \end{bmatrix}
x(2)=⎣⎢⎢⎡14163240⎦⎥⎥⎤
使用
x
j
(
i
)
x_j^{(i)}
xj(i)来表示第i个样本的特征值所组成的列向量中的第j个值 (截至此处起始标号为1而不是0),如:
x
3
(
2
)
=
2
x_3^{(2)} = 2
x3(2)=2
变量,假设函数,代价函数的变化
原来单变量的时候,我们的假设函数形式为:
h
θ
(
x
)
=
h
0
+
h
1
x
1
h_\theta(x) = h_0 + h_1x_1
hθ(x)=h0+h1x1
以此类推,我们现在具有多变量的情况下,假设函数形式改变为:
h
θ
(
x
)
=
h
0
+
h
1
x
1
+
h
2
x
2
+
h
3
x
3
+
h
4
x
4
h_\theta(x) = h_0 + h_1x_1+h_2x_2+h_3x_3+h_4x_4
hθ(x)=h0+h1x1+h2x2+h3x3+h4x4
为了方便起见,我们需要对上一小节中定义的列向量做一些修改。我们定义一个额外的特征量
x
0
(
i
)
=
1
x_0^{(i)} = 1
x0(i)=1。也就是说,我们将上述列向量扩充了一行 (到这里起始标号为0),将上述整个表扩充了一列,例:
x
(
2
)
=
[
1
1416
3
2
40
]
x^{(2)} = \begin{bmatrix} 1\\1416\\ 3 \\ 2 \\40 \end{bmatrix}
x(2)=⎣⎢⎢⎢⎢⎡114163240⎦⎥⎥⎥⎥⎤
那么一般的,特征值构成的列向量形式为:
x
=
[
x
0
x
1
x
2
x
3
x
4
]
x= \begin{bmatrix} x_0\\ x_1\\ x_2 \\ x_3 \\ x_4 \end{bmatrix}
x=⎣⎢⎢⎢⎢⎡x0x1x2x3x4⎦⎥⎥⎥⎥⎤
同时,我们将参数写成列向量:
θ
=
[
θ
0
θ
1
θ
2
θ
3
θ
4
]
\theta= \begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2 \\ \theta_3 \\ \theta_4 \end{bmatrix}
θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2θ3θ4⎦⎥⎥⎥⎥⎤
因此,假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x)可写成:
h
θ
(
x
)
=
θ
T
⃗
x
⃗
h_\theta(x) = \vec{\theta^T} \vec{x}
hθ(x)=θTx
同样的,代价函数写成:
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
此时,计算机应执行下列操作:
θ
i
:
=
θ
i
−
α
∂
J
(
θ
)
∂
θ
i
\theta_i := \theta_i - \alpha \frac {\partial J(\theta)}{\partial\theta_i}
θi:=θi−α∂θi∂J(θ)
即同步更新各个参数。
更为细致地说,后面的导数项根据计算可以得出来。具体结果如下:
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
\theta_0 := \theta_0 - \alpha\frac{1}{m} \sum_ {i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)
θ
1
:
=
θ
1
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
1
(
i
)
\theta_1 := \theta_1 - \alpha\frac{1}{m} \sum_ {i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_1^{(i)}
θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))x1(i)
θ
2
:
=
θ
2
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
2
(
i
)
\theta_2 := \theta_2 - \alpha\frac{1}{m} \sum_ {i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_2^{(i)}
θ2:=θ2−αm1i=1∑m(hθ(x(i))−y(i))x2(i)
θ
3
:
=
θ
3
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
3
(
i
)
\theta_3 := \theta_3 - \alpha\frac{1}{m} \sum_ {i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_3^{(i)}
θ3:=θ3−αm1i=1∑m(hθ(x(i))−y(i))x3(i)
.
.
.
.
.
.
......
......
梯度下降实践——1.特征缩放
最大绝对值归一化
我们在处理机器学习的相关特征值时,可能会遇上特征值与特征值之间的数值差距过大的情况。比如房屋面积(1944,2000…)和卧室个数(3,5…)。如果不加处理就扔给算法处理,最后呈现出来的等高线图效果就是:
这里插一点不精确的数学分析,从如图所示的起点出发,其方向(即曲面在这一点的切线方向)一部分向下,另一部分并不是指向最低点(二维图中的中心),所以其轨迹如图所示。根据前文所述,导数项提供起始方向,学习率负责距离,点是沿着曲面走的。
解决方法是最大绝对值归一化。如图所示:
这样,
x
1
,
x
2
x_1,x_2
x1,x2均位于[0,1]之间。等高线图就会变成下面这个样子:下降也会比较快。
事实上,考虑到一些指标并不一定为正数,所以我们通常将特征值约束在[-1,1]之间。但是也并不绝对,比如要是有一个数据位于[0,3]之间的话,也并不需要对其归一化。除非是某个特征值的数量大出或者小了几个数量级才需要归一化,如·200,-0.0004。吴恩达在这里给出了一个经验范围:不能超过[-3,+3],不能低于[-0.3,+0.3]。
均值归一化
均值归一化是指将数值范围缩放到 [-1, 1] 区间里,且数据的均值变为0,其公式为:
x
′
=
x
−
μ
x
m
a
x
−
x
m
i
n
x^{'} = \frac{x-\mu}{x_{max}-x_{min}}
x′=xmax−xminx−μ
均值归一化并不会改变样本数据的分布情况
梯度下降实践——2.学习率
关于学习率的问题我们之前已经详细考察过了,这里做一点简略的描述。
由前文可知,导数项提供起始方向,学习率负责距离,这两点使得点沿着曲面行进。若
α
\alpha
α取的足够小,那么代价函数随着迭代次数增加而变化的变化趋势应该如下:
而我们遇到的情况可能如下所示:
两者都是因为学习率过大而导致难以收敛,因此应该调小学习率。我们通常按以下规律来调整学习率:
特征选择和多项式回归
创造新的特征
选择和创造合理的特征值会使我们的学习模型更加高效准确,这里我们仍然以房屋售价为例子来阐述。
假设房屋售价与房子的临街宽度和纵深有关,我们可以创造这样一个线性回归模型:
h
θ
(
x
⃗
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
h_\theta(\vec{x}) = \theta_0 + \theta_1x_1+\theta_2x_2
hθ(x)=θ0+θ1x1+θ2x2
我们可以创造一个新的特征,定义为房屋面积,即
x
=
x
1
∗
x
2
x = x_1*x_2
x=x1∗x2
故模型修改为:
h
θ
(
x
)
=
θ
0
+
θ
x
h_\theta(x) = \theta_0 + \theta x
hθ(x)=θ0+θx
多项式回归
面对如图所示的数据,简单的线性回归似乎并不适用,我们考虑引入多项式回归:
即
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
=
x
x_1 = x
x1=x
x
2
=
x
2
x_2 = x^2
x2=x2
x
3
=
x
3
x_3 = x^3
x3=x3
这样,假设函数修改为:
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
经过这样的处理,我们就将多项式回归转化为了我们之前熟悉的线性回归。同时由于高次项的出现,可能需要我们进行特征缩放的操作以实现梯度下降。
正规方程
我们之前讲的寻找最优参数的迭代方法是梯度下降法,这里我们引入一种新的方法,即利用正规方程直接求出最佳参数,一步完成。
下列结论推导过程较为复杂(具体过程可以参考此网页),我们这里仅仅给出结论
https://zhuanlan.zhihu.com/p/60719445
我们首先回顾一下固定标号,m代表样本数量,n代表特征量个数,y代表实际值。除此之外,我们定义各个特征量为
x
i
x_i
xi,且将x汇总起来形成矩阵X。如下图所示:
然后,我们运用正规方程法求解出最佳参数,公式如下:
θ
=
(
x
T
x
)
−
1
x
T
y
\theta = (x^Tx)^{-1}x^Ty
θ=(xTx)−1xTy
正规方程法由于不存在多次迭代的过程,所以不需要做特征缩放。
梯度下降法 | 正规方程 |
---|---|
需要选择学习率 | 不需要选择学习率 |
需要多次迭代 | 不需要多次迭代 |
在特征比较多时效果很好 | 由于需要计算 ( x T x ) − 1 (x^Tx)^{-1} (xTx)−1,复杂度高达O( n 3 ) n^3) n3) |
建议是当n<10000时选择正规方程,反之选择梯度下降。
正规方程的局限性
根据前文所示,我们认为正规方程法可以直接计算出最为理想的
θ
\theta
θ参数。其计算公式如下:
θ
=
(
x
T
x
)
−
1
x
T
y
\theta = (x^Tx)^{-1}x^Ty
θ=(xTx)−1xTy
显然当
(
x
T
x
)
−
1
(x^Tx)^{-1}
(xTx)−1不可逆的时候,无法根据正规方程求解。以下两种情况可能导致我们无法使用正规方程:
- 特征中有冗余向量,即向量有强线性相关性
举例来说, x 1 x_1 x1表示房屋面积( m 2 m^2 m2), x 2 x_2 x2也表示房屋面积( f e e t 2 feet^2 feet2)。这时两个特征值之间实际上表述的是同一个量,只不过是单位有所不一样,这导致了两者之间具有强相关性: x 1 = ( 3.28 ) 2 x 2 x_1 = (3.28)^2x_2 x1=(3.28)2x2。 - m<n也会导致正规方程无法使用。此时特征值过多而样本量很多。