个人blog https://verbf.github.io
本篇介绍了有关在多特征的情况下如何使用线性回归,以及一些相关的技巧。

场景描述

在多数时候我们的特征并不会只有一个。在预测房价的例子中,除了房屋的面积之外,房屋的房间数,楼层,房屋的年龄等也可以用于房价的预测。

面积(x1x_1) 房间数(x2x_2) 楼层(x3x_3) 房屋年龄(x4x_4) 价格(y)
2101 3 2 20 460
1236 3 1 40 232
1514 2 2 50 315

符号注释 :
n : 特征的数量
x(i)x^{(i)} : 第i个训练样本的特征向量
xj(i)x^{(i)}_j : 第i个训练样本的第j个特征值

例 :

x(2)=[12363140]x3(2)=1x^{(2)} = \begin{bmatrix} 1236 \\ 3 \\ 1 \\ 40 \end{bmatrix} \qquad x_3^{(2)} =1

假设函数

因为特征的数量增加,假设函数也做出了相应的变化
hΘ(x)=Θ0+Θ1x1+Θ2x2+Θ3x3+...+Θnxnh_\Theta(x) = \Theta_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n
为了书写的方便,我们定义一个x0=1\quad x_0=1 \quad(x0(i)=1)(x_0^{(i)}=1)
于是我们有 :
hΘ(x)=Θ0x1+Θ1x1+Θ2x2+Θ3x3+...+Θnxnh_\Theta(x) = \Theta_0x_1 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n
为进一步简化这个表达式,我们使用向量的方式来表示 :

X=[x0x1x2x3...xn]Θ=[Θ0Θ1Θ2Θ3...Θn]X=\begin{bmatrix} x_0\\x_1\\x_2\\x_3\\...\\x_n \end{bmatrix} \qquad \Theta=\begin{bmatrix} \Theta_0\\\Theta_1\\\Theta_2\\\Theta_3\\...\\\Theta_n \end{bmatrix}

hΘ(x)=Θ0x0+Θ1x1+Θ2x2+Θ3x3+...+ΘnxnΘTXh_\Theta(x) = \underbrace{ \Theta_0x_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3 + ... + \Theta_nx_n}_{\Theta^TX}

\Huge\Downarrow

hΘ(x)=ΘTXh_\Theta(x) = \Theta^TX

代价函数

J(Θ)=12mi=1m(hΘ(x(i))y(i))J(\Theta) = \frac{1}{2m}\sum_{i=1}^m(h_\Theta(x^{(i)}) - y^{(i)})

梯度下降

Repeat{Θj=ΘjαΘjJ(Θ0,...,Θn)}Repeat\left\{ \Theta_j = \Theta_j - \alpha\frac{\partial}{\partial\Theta_j}J(\Theta_0,...,\Theta_n) \right\}

需要注意的是,这里的Θj\Theta_j需要同步更新

同步更新 异步更新
temp0 = αΘ0J(Θ0,...,Θn)\alpha\frac{\partial}{\partial\Theta_0}J(\Theta_0,...,\Theta_n)
temp1 = αΘ1J(Θ0,...,Θn)\alpha\frac{\partial}{\partial\Theta_1}J(\Theta_0,...,\Theta_n)
Θ0\Theta_0 = temp0
Θ1\Theta_1 = temp1
temp0 = αΘ0J(Θ0,...,Θn)\alpha\frac{\partial}{\partial\Theta_0}J(\Theta_0,...,\Theta_n)
Θ0\Theta_0 = temp0
temp1 = αΘ1J(Θ0,...,Θn)\alpha\frac{\partial}{\partial\Theta_1}J(\Theta_0,...,\Theta_n)
Θ1\Theta_1 = temp1

特征缩放(Feature Scaling)

确保特征的数值大小在相似的规模下,这样梯度下降法可以更快的收敛。
在做特征缩放时并不需要太精确,只是为了使梯度下降法能更快的收敛。

缩放前 缩放后
x1=size(02000feet2)x_1 = size(0-2000 feet^2) x1=size(feet2)2000 (0x11)x_1 = \frac{size(feet^{2})}{2000} \,(0\leq x_1 \leq 1)
x2=number of bedrooms(15)x_2=number \, of \, bedrooms(1-5) x1=num of bedrooms5 (0x21)x_1 = \frac{num \, of \, bedrooms}{5} \,(0\leq x_2 \leq 1)

均值归一化(Mean normalization)

特征缩放的一种方法
x1x1μ1S1 x_1 \Rightarrow \frac{x_1 - \mu_1}{S_1}
μ1\mu_1 表示训练集中特征x1x_1的平均值
S1S_1 表示该特征值的范围(max - min)

多项式回归

多项式回归就是用线性回归的方式去拟合更复杂的函数,甚至是非线性的函数。

特征选择

如图所示,我们有两个特征,房子的临街宽度和垂直深度。但我们通常使用面积来表示房屋的大小。所以我们可以使用房屋的面积(临街宽度 x 垂直深度)作为一个特征。
机器学习笔记(吴恩达)(二)--多变量线性回归

拟合多项式

对于下图中的数据集,我们继续使用一次函数来拟合的话,效果并不太好。
如果使用二次函数来拟合的话,效果可能也不是特别好,因为我们知道,二次函数的图像(图中蓝色的线)在后面是一个下降的趋势,然而现实中房价并不会随着房屋面积的增加而减少。
所以这里我们可以使用三次函数(图中绿色的线)来拟合。
机器学习笔记(吴恩达)(二)--多变量线性回归
我们只要做一些简单的修改就可以将线性回归应用到多项式上。
hΘ(x)=Θ0+Θ1x1+Θ2x2+Θ3x3h_\Theta(x)=\Theta_0 + \Theta_1x_1 + \Theta_2x_2 + \Theta_3x_3
\huge\Downarrow
hΘ(x)=Θ0+Θ1size+Θ2(size)2+Θ3(size)3h_\Theta(x)=\Theta_0 + \Theta_1size + \Theta_2(size)^2 + \Theta_3(size)^3\\
我们令
x1=(size)x2=(size)2x3=(size)3x_1=(size)\\ x_2=(size)^2\\ x_3=(size)^3
即可。
需要强调的是,在这种情况下特征缩放就显得尤为重要。

检验方法

我们如何判断梯度下降法是否正常工作呢?
通常可以观察代价函数的值与迭代次数的关系来判断。
当梯度下降法正常运行时,如下图所示,随着迭代次数的增加,代价函数的值越来越小,当梯度下降算法迭代60次左右时,代价函数的值几乎不再变化,说明此时算法已经收敛。
机器学习笔记(吴恩达)(二)--多变量线性回归
当出现以下两种情况时,代价函数的值上下震荡,或是逐渐变大,这都说明梯度下降法并没有正常工作。
通常出现这两种情况的原因都是学习率 α\alpha 过大。
机器学习笔记(吴恩达)(二)--多变量线性回归

学习率选择

总的来说学习率过小的话,会导致收敛过慢
而学习率过大的话,可能导致无法收敛,代价函数 J(Θ)J(\Theta) 并不会在每次迭代之后都下降。
我们可以通过多次试验的方式找出合适的学习率值的大小。
另:按照吴恩达老师的推荐,我们可以如下依次选择学习率的大小。
… 0.001,0.03,0.1,0.3 …

正规方程

正规方程可以让我们再某些情况下,更快的求解出参数 Θ\Theta
假设我们有m个样本,(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(n)},y^{(n)}) ,n 个特征。
我们将单个样本的特征写成向量形式,再将所有的向量转置后,写成矩阵形式。
{% raw %}
x(i)=[x0(i)x1(i)x3(i)...xn(i)]X=[(x(1))T(x(2))T(x(3))T(x(m))T]m(n+1) x_{(i)} = \begin{bmatrix} x_0^{(i)} \\ x_1^{(i)} \\ x_3^{(i)} \\ ... \\ x_n^{(i)} \end{bmatrix} \qquad X = \underbrace{\begin{bmatrix} ---(x^{(1)})^T---\\ ---(x^{(2)})^T---\\ ---(x^{(3)})^T---\\ ---------\\ ---(x^{(m)})^T---\\ \end{bmatrix}}_{m * (n+1)}
{% endraw %}
接着,只要求解如下这个矩阵表达式,就可得到参数Θ\Theta的值
Θ=(XTX)1XTy\Theta = (X^TX)^{-1}X^Ty
在上式中需要对矩阵求逆,那么如果矩阵不可逆呢?
一般来说,大部分矩阵都是可逆的,出现了以下两种情况时,会导致矩阵不可逆:

  • 多余特征
    如下所示,显然x1x_1x2x_2两个特征是线性相关的,那么这时就会导致矩阵不可逆
    x1=size in feet2x2=size in m2x_1 = size \ in \ feet^2 \\ x_2 = size \ in \ m^2

  • 太多特征
    如果我们的特征数量较多,而样本数量较少,造成特征数量大于样本数量,这种情况下也会导致矩阵不可逆。例如,生物信息学的基因芯片数据中常有成千上万个属性,但往往只有几十,上百个样例。

正规方程与梯度下降法比较

梯度下降 正规方程
缺点 需要多次迭代
需要选择学习率
优点 不需要多次迭代
不需要选择学习率
优点 当特征数量n很大时,
也能运行的很好
缺点 当特征数量n较大时,
速度很慢

吴恩达老师推荐,当n大于10000时选择梯度下降法,小于10000时选择正规方程法。

相关文章: