回顾:线性回归是回归问题中的一种,其假设目标值(即,输出 y y y)与特征值(即,输入 x x x)之间线性相关,即满足一个多元一次方程。按照特征数量的多少,线性回归又分为一元线性回归(即,只有一个特征变量)和多元线性回归(即,有多个特征变量)。
假设您正打算卖房子,想把自己的房子卖一个好价钱,第一步就需要给房子估个价格。一种方法是,首先收集有关最近出售房屋的信息,并建立房屋价格预测模型。假设通过前期调研,你发现,在你所在区域,房屋价格最重要的决定因素就是房屋面积和房间数。下表为你收集到的数据情况1…
观测值 # | 房屋面积 f e e t 2 feet^2 feet2( X 1 X_1 X1) | 房间数( X 2 X_2 X2) | 售价( Y Y Y) |
---|---|---|---|
1 | 2,104 | 3 | $ 399,900 |
2 | 1,600 | 3 | $ 329,900 |
3 | 2,400 | 3 | $ 369,000 |
4 | 1,416 | 2 | $ 232,000 |
… | … | … | |
47 | 1,203 | 3 | $ 239,500 |
下面,我们来建立一个多元线性回归模型,模型的输入为房屋面积和房间数,输出为房屋售价。
线性回归假设目标值与特征之间线性相关,对于一元线性回归而言,即可以通过一条直线来拟合目标值和特征值之间的关系;对于多元线性回归而言,即通过一个平面来拟合目标值和特征值之间的关系,如下图1所示。
在一元线性回归中,模型/假设 h ( x ) h(x) h(x) 的函数表达形式如下:
h Θ ( x ) = θ 0 + θ 1 ⋅ x h_\Theta(x) = \theta_0 + \theta_1 \cdot x hΘ(x)=θ0+θ1⋅x
对于多元线性回归而言,我们不只有一个特征变量,即:
h Θ ( x ) = θ 0 + θ 1 ⋅ x 1 + θ 2 ⋅ x 2 + ⋯ + θ n ⋅ x n h_\Theta(x) = \theta_0 + \theta_1 \cdot x_1 + \theta_2 \cdot x_2 + \cdots + \theta_n \cdot x_n hΘ(x)=θ0+θ1⋅x1+θ2⋅x2+⋯+θn⋅xn
简单起见,假设 x 0 = 1 x_0 = 1 x0=1, 则上式可表示成:
h Θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = [ θ 0 , θ 1 , θ 2 , ⋯ , θ n ] [ x 0 x 1 x 2 ⋮ x n ] = Θ T X \begin{aligned} h_\Theta(x)& = \theta_0 x_0 + \theta_1x_1 + \theta_2 x_2 + \cdots + \theta_n x_n \\ & = \begin{bmatrix} \theta_0, \theta_1, \theta_2, \cdots, \theta_n\\\end{bmatrix} \begin{bmatrix} x_0\\ x_1 \\ x_2\\ \vdots\\ x_n\\ \end{bmatrix} \\ &= \Theta^T X \end{aligned} hΘ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn=[θ0,θ1,θ2,⋯,θn]⎣⎢⎢⎢⎢⎢⎡x0x1x2⋮xn⎦⎥⎥⎥⎥⎥⎤=ΘTX
其中, X X X 和 Θ \Theta Θ 均为 n + 1 n+1 n+1 维向量:
X = [ x 0 x 1 x 2 ⋮ x n ] ∈ R n + 1 , Θ = [ θ 0 θ 1 θ 2 ⋮ θ n ] ∈ R n + 1 , X = \begin{bmatrix} x_0\\ x_1 \\ x_2\\ \vdots\\ x_n\\ \end{bmatrix} \in \R^{n+1}, \Theta = \begin{bmatrix} \theta_0\\ \theta_1 \\ \theta_2\\ \vdots\\ \theta_n\\ \end{bmatrix} \in \R^{n+1}, X=⎣⎢⎢⎢⎢⎢⎡x0x1x2⋮xn⎦⎥⎥⎥⎥⎥⎤∈Rn+1,Θ=⎣⎢⎢⎢⎢⎢⎡θ0θ1θ2⋮θn⎦⎥⎥⎥⎥⎥⎤∈Rn+1,
x j x_j xj 代表输入变量 j j j(特征 j j j)
θ j \theta_j θj 代表特征 j j j 的权重参数
h h h 代表学习算法的解决方案或函数
n n n 代表特征数量
若 n = 1 n = 1 n=1,则存在 θ 0 \theta_0 θ0 和 θ 1 \theta_1 θ1 两个参数(Parameters),即为一元线性回归。
线性回归的基本表达式: h Θ ( X ) = Θ T X h_\Theta(X) = \Theta^T X hΘ(X)=ΘTX, Θ T \Theta^T ΘT指的是 Θ \Theta Θ向量的转置
在有些地方,上式也会写做: h W , b ( X ) = W T X + b h_{W,b}(X) = W^T X + b hW,b(X)=WTX+b, 其中: W = [ θ 1 , θ 2 , ⋯ , θ n ] T ∈ R n W = [\theta_1, \theta_2,\cdots, \theta_n]^T \in \R^n W=[θ1,θ2,⋯,θn]T∈Rn, b = θ 0 b = \theta_0 b=θ0 为常量
以上的表达形式,在今后的系列文章中会频繁出现哦~
类似地,我们将损失函数一般化,使其适合多元线性回归问题。
一元线性回归的基本形为:
H y p o t h e s i s : h θ ( x ) = θ 0 + θ 1 ⋅ x P a r a m e t e r s : θ 0 , θ 1 C o s t F u n c t i o n : J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 G o a l : min θ 0 , θ 1 J ( θ 0 , θ 1 ) \begin{aligned} & Hypothesis: h_\theta(x) = \theta_0 + \theta_1 \cdot x \\ & Parameters: \theta_0, \theta_1 \\ & Cost Function: J(\theta_0, \theta_1) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \\ & Goal: \min_{\theta_0, \theta_1} J(\theta_0, \theta_1) \end{aligned} Hypothesis:hθ(x)=θ0+θ1⋅xParameters:θ0,θ1CostFunction:J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2Goal:θ0,θ1minJ(θ0,θ1)
多元线性回归的基本形为:
H y p o t h e s i s : h Θ ( x ) = Θ T X P a r a m e t e r s : Θ = [ θ 0 , θ 1 , θ 2 , ⋯ , θ n ] T C o s t F u n c t i o n : J ( Θ ) = 1 2 m ∑ i = 1 m ( h Θ ( x ( i ) ) − y ( i ) ) 2 G o a l : min Θ J ( Θ ) \begin{aligned} & Hypothesis: h_\Theta(x) = \Theta^T X \\ & Parameters: \Theta = [\theta_0, \theta_1, \theta_2,\cdots,\theta_n]^T\\ & Cost Function: J(\Theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2 \\ & Goal: \min_{\Theta} J(\Theta) \end{aligned} Hypothesis:hΘ(x)=ΘTXParameters:Θ=[θ0,θ1,θ2,⋯,θn]TCostFunction:J(Θ)=2m1i=1∑m(hΘ(x(i))−y(i))2Goal:ΘminJ(Θ)
回顾:梯度下降算法是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出损失函数 J ( Θ ) J(\Theta) J(Θ) 的最小值。
一元线性回归问题中,每次迭代过程的参数更新如下 ( n = 1 ) (n = 1) (n=1):
对于每次迭代,同时更新参数 θ 0 \theta_0 θ0 和 θ 1 \theta_1 θ1:
{ θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) } \left \{ \begin{aligned} & \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)})\\ & \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) \cdot x^{(i)} \end{aligned} \right \} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x(i)⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫
注:
上式中 : = := := 为赋值符号,即用其右侧的值更新其左侧的值
上式中 α \alpha α 为学习率
多元线性回归问题中,每次迭代过程的参数更新如下 ( n ≥ 1 ) (n \ge 1) (n≥1):
对于每次迭代,同样同时更新参数 θ j ( j = 0 , 1 , 2 , ⋯ , n ) \theta_j (j = 0,1,2,\cdots,n) θj(j=0,1,2,⋯,n)
{ θ j : = θ j − α 1 m ∑ i = 1 m ( h Θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) } \left \{ \begin{aligned} & \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^m (h_\Theta (x^{(i)}) - y^{(i)}) \cdot x_j^{(i)}\\ \end{aligned} \right \} {θj:=θj−αm1i=1∑m(hΘ(x(i))−y(i))⋅xj(i)}
即(展开之后…):
{ θ 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 ) ⋯ θ n : = θ n − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x n ( i ) } \left \{ \begin{aligned} & \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)}\\ & \cdots\\ & \theta_n := \theta_n - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) \cdot x_n^{(i)}\\ \end{aligned} \right \} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))⋅x0(i)θ1:=θ1−αm1i=1∑m(hθ(x(i))−y(i))⋅x1(i)θ2:=θ2−αm1i=1∑m(hθ(x(i))−y(i))⋅x2(i)⋯θn:=θn−αm1i=1∑m(hθ(x(i))−y(i))⋅xn(i)⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫
技巧一 —— 特征归一化(Feature scaling):即将所选特征的值都缩放到一个大致相似的范围。
从上面的数据中我们看到,房屋面积是房间数量的近千倍,如果不做特征归一化,这会对模型训练造成什么影响呢?
首先,模型会认为房屋面积对决定房价更重要。
其次,特征归一化之后,一些算法比如梯度下降算法,可以加快收敛,减少采用梯度下降算法迭代的次数。
为什么会这样呢?我们可以想象,在没有进行特征归一化时,损失函数 J J J 的等高线图将特别接近于椭圆,除非我们的起始点刚好很靠近椭圆的轴(如图2左图虚线所示),才有可能使我们的负梯度方向是基本指向最小值方向的。这种几率很小,因为起始点一般都是随机取的。否则的话,我们的负梯度方向就会像图2左中的例子里一样完全不是指向椭圆圆心,在长轴上反复横跳,缓慢地向最小值逼近。
而,特征归一化之后,损失函数 J J J 的等高线图接近于圆形,使得我们的负梯度方向始终指向圆心,如图2右所示,收敛就越快。
哪些算法中一定要对特征做归一化呢?特征归一化的经典方法有哪些?感兴趣的读者可以参见 All aboout Feature Scaling2.。
技巧二 —— 合理选择学习率(Learning rate)。
在前一篇中我们提到了,学习率 α \alpha α 的选择对于梯度下降算法的有效收敛至关重要。
一种直观的选取合适的学习率 α \alpha α 的方法,便是绘制损失函数 J ( θ ) J(\theta) J(θ) 关于迭代次数的曲线,以确保 J ( θ ) J(\theta) J(θ) 在每次迭代后均会下降,并在迭代结束时,基本趋于稳定。
回到本篇开始预测房价的例子,我们来直观地看一下学习率对算法收敛的影响。看起来,0.001 对于此例来说,显然不是一个合适的学习率,因为算法在迭代 400 次之后,仍旧无法收敛,是一个设置过小的学习率。
相比于,一元和多元线性回归仅可以拟合自变量(即,输入)和因变量(即,输出)之间的线性关系,多项式回归可以拟合自变量和因变量之间的非线性关系(如下图4)。在多项式回归中,自变量 x x x 和因变量 y y y 之间的关系被建模为 n n n 次多项式,因而可以在一定程度上刻画较复杂的非线性关系。
其实,多项式回归根本上也是一种线性回归。为什么这么说呢?比如在下图4中,可以设定一个新的变量 x 2 = x 1 2 x_2 = x_1^2 x2=x12, 则原式变为: y = b 0 + b 1 x 1 + b 2 x 2 y = b_0 + b_1 x_1 + b_2 x_2 y=b0+b1x1+b2x2,这就是一个二元线性回归。
此篇我们介绍了另一类常用的线性回归方法,多元线性回归。 很多时候,我们要研究的问题,其结果由多个特征变量共同影响。显然此时,我们不能使用一元线性回归了。更好的解决方案,是使用多个特征变量的组合来预测和分析问题,这种方法就是多元线性回归。
同样地,为了使损失函数最小化,我们仍旧可以使用梯度下降算法,找出最好的拟合平面。我们介绍了两种常用的加快收敛速度的方法:
影响结果的各个特征变量之间,数量上可能相差较大,使得梯度下降法的收敛速度较慢。为加快收敛,减少采用梯度下降算法迭代的次数,可以使用特征归一化,将所选特征的值缩放到一个相似的范围内。
此外,合理选择学习率,也是一个能加快收敛速度的方法。
最后,我们介绍了线性回归的一种变形,多项式回归。一元与多元线性回归,都仅能拟合输入与输出之间的线性关系。当输入与输出的关系并非线性的时候,我们通过将自变量与因变量之间的关系建模为 n n n 次多项式,形成多项式回归。
数据来自吴恩达机器学习课程 ↩︎
All about Feature Scaling ↩︎