机器学习笔记(吴恩达)(二)--多变量线性回归


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

场景描述

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

面积( x 1 x_1 x1) 房间数( x 2 x_2 x2) 楼层( x 3 x_3 x3) 房屋年龄( x 4 x_4 x4) 价格(y)
2101 3 2 20 460
1236 3 1 40 232
1514 2 2 50 315

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

例 :

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

假设函数

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

X = [ x 0 x 1 x 2 x 3 . . . x n ] Θ = [ Θ 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} X=x0x1x2x3...xnΘ=Θ0Θ1Θ2Θ3...Θn

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

⇓ \Huge\Downarrow

h Θ ( x ) = Θ T X h_\Theta(x) = \Theta^TX hΘ(x)=ΘTX

代价函数

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

梯度下降

R e p e a t { Θ j = Θ j − α ∂ ∂ Θ j J ( Θ 0 , . . . , Θ n ) } Repeat\left\{ \Theta_j = \Theta_j - \alpha\frac{\partial}{\partial\Theta_j}J(\Theta_0,...,\Theta_n) \right\} Repeat{ Θj=ΘjαΘjJ(Θ0,...,Θn)}

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

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

特征缩放(Feature Scaling)

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

缩放前 缩放后
x 1 = s i z e ( 0 − 2000 f e e t 2 ) x_1 = size(0-2000 feet^2) x1=size(02000feet2) x 1 = s i z e ( f e e t 2 ) 2000   ( 0 ≤ x 1 ≤ 1 ) x_1 = \frac{size(feet^{2})}{2000} \,(0\leq x_1 \leq 1) x1=2000size(feet2)(0x11)
x 2 = n u m b e r   o f   b e d r o o m s ( 1 − 5 ) x_2=number \, of \, bedrooms(1-5) x2=numberofbedrooms(15) x 1 = n u m   o f   b e d r o o m s 5   ( 0 ≤ x 2 ≤ 1 ) x_1 = \frac{num \, of \, bedrooms}{5} \,(0\leq x_2 \leq 1) x1=5numofbedrooms(0x21)

均值归一化(Mean normalization)

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

多项式回归

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

特征选择

如图所示,我们有两个特征,房子的临街宽度和垂直深度。但我们通常使用面积来表示房屋的大小。所以我们可以使用房屋的面积(临街宽度 x 垂直深度)作为一个特征。
在这里插入图片描述

拟合多项式

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

检验方法

我们如何判断梯度下降法是否正常工作呢?
通常可以观察代价函数的值与迭代次数的关系来判断。
当梯度下降法正常运行时,如下图所示,随着迭代次数的增加,代价函数的值越来越小,当梯度下降算法迭代60次左右时,代价函数的值几乎不再变化,说明此时算法已经收敛。
在这里插入图片描述
当出现以下两种情况时,代价函数的值上下震荡,或是逐渐变大,这都说明梯度下降法并没有正常工作。
通常出现这两种情况的原因都是学习率 α \alpha α 过大。
在这里插入图片描述

学习率选择

总的来说学习率过小的话,会导致收敛过慢
而学习率过大的话,可能导致无法收敛,代价函数 J ( Θ ) J(\Theta) J(Θ) 并不会在每次迭代之后都下降。
我们可以通过多次试验的方式找出合适的学习率值的大小。
另:按照吴恩达老师的推荐,我们可以如下依次选择学习率的大小。
… 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)}) (x(1),y(1)),(x(2),y(2)),...,(x(n),y(n)) ,n 个特征。
我们将单个样本的特征写成向量形式,再将所有的向量转置后,写成矩阵形式。
{% raw %}
x ( i ) = [ x 0 ( i ) x 1 ( i ) x 3 ( i ) . . . x n ( 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)} x(i)=x0(i)x1(i)x3(i)...xn(i)X=m(n+1) (x(1))T(x(2))T(x(3))T(x(m))T
{% endraw %}
接着,只要求解如下这个矩阵表达式,就可得到参数 Θ \Theta Θ的值
Θ = ( X T X ) − 1 X T y \Theta = (X^TX)^{-1}X^Ty Θ=(XTX)1XTy
在上式中需要对矩阵求逆,那么如果矩阵不可逆呢?
一般来说,大部分矩阵都是可逆的,出现了以下两种情况时,会导致矩阵不可逆:

  • 多余特征
    如下所示,显然 x 1 x_1 x1 x 2 x_2 x2两个特征是线性相关的,那么这时就会导致矩阵不可逆
    x 1 = s i z e   i n   f e e t 2 x 2 = s i z e   i n   m 2 x_1 = size \ in \ feet^2 \\ x_2 = size \ in \ m^2 x1=size in feet2x2=size in m2

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

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

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

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

猜你喜欢

转载自blog.csdn.net/SugerOO/article/details/89703148
今日推荐