实际应用中我们不可能总是遇到单变量,或者说单特征值(详见2号笔记)的线性回归模型。
下图是以房屋售卖为例的多元线性回归模型
面积 | 卧室数量 | 楼层数量 | 房龄 | 价格 |
---|---|---|---|---|
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 4 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
…… | …… | …… | …… | …… |
\(n\):表示特征数量,此例中\(n=4\)
\(m\):表示样本数量,一行表示一个样本
\(x^i\):表示第\(i\)个样本,意即第\(i\)行样本,如\(x^1\)表示第\(1\)行(个)样本
\(x_j^i\):表示第\(i\)个样本的第\(j\)个特征的值,如\(x_2^1=5\)
显然,此时不能再使用\(h_θ(x)=θ_0+θ_1x\)作为假设函数
而应当使用
(n表示特征数量)
作为假设函数
为表示简洁,可以考虑表示成矩阵形式
\(x=\begin{bmatrix} x_0\\\\ x_1\\\\ x_2\\\\…\\\\x_n \end{bmatrix}\) \(θ=\begin{bmatrix} θ_0\\\\ θ_1\\\\ θ_2\\\\…\\\\θ_n \end{bmatrix}\)
为方便起见我们约定\(x_0^i=1\)
故假设函数可以做此变换
假设函数:\(h_θ(x)=θ_0+θ_1x_1+θ_2x_2+θ_3x_3+θ_4x_4+……+θ_nx_n\)
参数θ:\(θ_0,θ_1,……,θ_n\) 或者\(θ=\begin{bmatrix} θ_0\\\\ θ_1\\\\ θ_2\\\\…\\\\θ_n \end{bmatrix}\)
代价函数:\(J(θ_0,θ_1)=\frac{1}{2m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)^2}\)
迭代过程:\(θ_j:=θ_j-α \frac{∂J(θ)}{θ_j}\)
梯度下降在多元线性回归中的迭代有些许不同。
单元线性回归中,\(n=1\),我们需要迭代参数\(θ_0\)和\(θ_1\)
\(θ_0:=θ_0- α\frac{1}{m} \sum^{m}_{i=1}{h_θ(x^i)-y^i}\)
\(θ_1:=θ_1- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x^i}\)
而在多元线性回归中,\(n≥1\),此时的迭代过程将变为
\(θ_j:=θ_j- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x_j^i}\)
其中\(j=0,...,n\)
详细来看如下式
\(θ_0:=θ_0- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x_0^i}\)
\(θ_1:=θ_1- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x_1^i}\)
\(θ_2:=θ_2- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x_2^i}\)
\(....\)
\(θ_j:=θ_j- α\frac{1}{m} \sum^{m}_{i=1}{(h_θ(x^i)-y^i)x_j^i}\)
我们约定\(x_0^i=1\)
在使用梯度下降算法时,我们应当保证特征值处在大致相同的范围内。
我们可以通过将每个输入值都设置在大致相同的范围内来加快梯度下降的速度。 这是因为θ在小范围内会迅速下降,而在大范围内会缓慢下降,因此当变量非常不均匀时,会以非常低的效率收敛到local minimum。
以房屋售卖为例,考虑两个特征
\(x_1 = 面积(0-2000英尺^2)\)
\(x_2 = 卧室数量(1-5个)\)
由于两个特征的数值尺度相差太大,所以可能导致代价函数的等高线图变得很瘦长
这种情况下,梯度下降会很慢,降低了算法运行效率
此时需要用到特征缩放,使特征缩放到大致相同的尺度范围内。
在此例中,采用如下缩放方法
\(x_1 = \frac{面积(英尺^2)}{2000}\)
\(x_2 = \frac{卧室数量(个)}{5}\)
即\(缩放后的特征值=\frac{原特征值}{该特征的最大值}\)
经过这样的运算,可以使\(0<x_{1}\leq 1\),\(0<x_{2}\leq 1\)
此时等高线图会变成
这样一来就提高了梯度下降算法的工作效率
一般来说,我们使用特征缩放通常是为了将特征的取值约束到\({-1}\leq x_i \leq 1\)的范围内。
当然也不一定非要缩放到-1到+1之间这么精确,只要范围接近,就可以。
0到3可以,-2到0.5也可以。
变化范围不能太大,同样不能太小,例如-0.0001到+0.0001之间就是不可取的。
我们可以将均值归一化理解为特征缩放的另一种方法。
特征缩放和均值归一化的作用都是为了减小样本数据的波动使得梯度下降能够更快速的寻找到一条‘捷径’,从而到达全局最小值。
均值归一化是先求得所有样本的某一特征的均值\(\mu_i\)
通过如下公式
\(x_i=\frac{x_i-\mu}{max}\)或者\(x_i=\frac{x_i-\mu}{max-min}\)
进行缩放
那么更一般的情况下,我们会采用如下公式
\(x_i=\frac{x_i-\mu}{S_i}\)其中\(S_i\)是标准差
为了更好地调试算法,我们在梯度下降算法运行时绘出它的函数图像。如下图:
横轴是迭代次数,纵轴是代价函数的值
经过迭代后,理想中的函数图像应该如下图所示:
可以看出此图中,经过300步迭代后,函数图像趋于平缓,说明此时已经到达一个local minimum,基本上收敛了。
我们甚至可以用自动收敛测试算法来测试是否收敛。原理是如果代价函数值小于某个阈值\(\epsilon\)(比如\(\epsilon=10^{-3}\)),则认为已经收敛,达到了最优。
但是往往这个阈值\(\epsilon\)难以去确定,所以通过函数图像来判断是可行的。
如果函数图像呈现递增,最常见的原因是学习速率\(\alpha\)过大,需要选择一个较小的值。
如果函数图像循环往复,那么通常同样是通过缩小学习速率\(\alpha\)的值来解决这个问题
总之,如果\(\alpha\)过小,会收敛过慢。
如果\(\alpha\)过大,则可能不会单调递减,甚至可能不会收敛。
经验上来说,通常选择如下的值,会取得比较好的效果
\(\alpha = ...,0.001,0.003,0.01,0.03,0.1,0.3,1...\)
尝试一系列\(\alpha\)的值,选择一个最大的和一个最小的,并在其范围内继续放缩,最终选择出最好的。