COURSE1 WEEK2
多维特征
在线性回归中,往往特征不止一个,而是具有多维特征
例如,在预测房价的例子中,我们知道更多的信息:
x 1 x_1 x1:房屋的面积
x 2 x_2 x2:卧室的数目
x 3 x_3 x3:楼层数目
x 4 x_4 x4:房屋的年限
因此,我们每一个特征 x ( i ) x^{(i)} x(i) 的表示变成了向量形式, x j ( i ) x^{(i)}_j xj(i) 表示具体的某的 特征( i 行 j 列)
从而,我们的线性模型公式转化为:
  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
        
          x 
         
        
          ) 
         
        
          = 
         
         
         
           w 
          
         
           1 
          
         
         
         
           x 
          
         
           1 
          
         
        
          + 
         
         
         
           w 
          
         
           2 
          
         
         
         
           x 
          
         
           2 
          
         
        
          + 
         
         
         
           w 
          
         
           3 
          
         
         
         
           x 
          
         
           3 
          
         
        
          + 
         
         
         
           w 
          
         
           4 
          
         
         
         
           x 
          
         
           4 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{w,b}(x) = w_1x_1 + w_2x_2 + w_3x_3 + w_4x_4 + b 
        
       
     fw,b(x)=w1x1+w2x2+w3x3+w4x4+b
 其中, 
     
      
       
        
        
          w 
         
        
          i 
         
        
       
      
        w_i 
       
      
    wi可以理解为第  
     
      
       
       
         i 
        
       
      
        i 
       
      
    i 个特征对目标的贡献程度
进而,推广到更一般的形式:
  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
        
          x 
         
        
          ) 
         
        
          = 
         
         
         
           w 
          
         
           1 
          
         
         
         
           x 
          
         
           1 
          
         
        
          + 
         
         
         
           w 
          
         
           2 
          
         
         
         
           x 
          
         
           2 
          
         
        
          + 
         
        
          ⋯ 
         
        
          + 
         
         
         
           w 
          
         
           n 
          
         
         
         
           x 
          
         
           n 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{w,b}(x) = w_1x_1 + w_2x_2 + \dots + w_nx_n + b 
        
       
     fw,b(x)=w1x1+w2x2+⋯+wnxn+b
 将所有的参数  
     
      
       
        
        
          w 
         
        
          i 
         
        
       
      
        w_i 
       
      
    wi组合在一起,形成向量  
     
      
       
        
        
          w 
         
        
          ⃗ 
         
        
       
         = 
        
       
         [ 
        
        
        
          w 
         
        
          1 
         
        
       
         , 
        
        
        
          w 
         
        
          2 
         
        
       
         , 
        
       
         … 
        
       
         , 
        
        
        
          w 
         
        
          n 
         
        
       
         ] 
        
       
      
        \vec {w} = [w_1, w_2, \dots, w_n] 
       
      
    w=[w1,w2,…,wn],将所有的特征  
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x_i 
       
      
    xi 组合在一起,形成一个向量  
     
      
       
        
        
          x 
         
        
          ⃗ 
         
        
       
         = 
        
       
         [ 
        
        
        
          x 
         
        
          1 
         
        
       
         , 
        
        
        
          x 
         
        
          2 
         
        
       
         , 
        
       
         … 
        
       
         , 
        
        
        
          x 
         
        
          n 
         
        
       
         ] 
        
       
      
        \vec{x} = [\boldsymbol x_1, \boldsymbol x_2, \dots, \boldsymbol x_n] 
       
      
    x=[x1,x2,…,xn]
从而,将模型形式可以写为:
  
      
       
        
         
         
           f 
          
          
           
           
             w 
            
           
             ⃗ 
            
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
         
           ⃗ 
          
         
        
          ) 
         
        
          = 
         
         
         
           w 
          
         
           ⃗ 
          
         
        
          ⋅ 
         
         
         
           x 
          
         
           ⃗ 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{\vec w, b}(\vec x) = \vec w \cdot \vec x + b 
        
       
     fw,b(x)=w⋅x+b
 其中, 
     
      
       
       
         ⋅ 
        
       
      
        \cdot 
       
      
    ⋅ 代表点乘
这种具有多个特征的线性回归模型叫做多元线性回归
向量化
在多元线性回归中,使用向量化的方法,可以使得代码的编写更加简洁,实现更加快速
如果不使用向量化,在代码的编写中,我们需要计算以下结果:
  
      
       
        
         
         
           f 
          
          
           
           
             w 
            
           
             ⃗ 
            
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
         
           ⃗ 
          
         
        
          ) 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            j 
           
          
            = 
           
          
            1 
           
          
         
           n 
          
         
         
         
           w 
          
         
           j 
          
         
         
         
           x 
          
         
           j 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{\vec w, b}(\vec x) = \sum _{j=1}^{n}w_jx_j + b 
        
       
     fw,b(x)=j=1∑nwjxj+b
 当  
     
      
       
       
         n 
        
       
      
        n 
       
      
    n 较大时,需要较大的计算量,实现较为复杂
f = 0
for j in range(n):
    f = f + w[j] * x[j]
f = f + b
 
所谓向量化,就是把数据都看作向量,在每一步的计算中使用向量的计算。例如多元线性回归模型,将 w w w 和 特征 x x x 进行点乘计算
f = np.dot(w, x) + b
 
向量化的好处:
- 使得代码更加简洁
 - 运算速度更快
 
多元线性回归的梯度下降
与单变量线性回归的梯度下降相似,唯一不同的是,此时要把参数  
     
      
       
       
         w 
        
       
      
        w 
       
      
    w 当作是一个向量  
     
      
       
        
        
          w 
         
        
          ⃗ 
         
        
       
      
        \vec w 
       
      
    w,因此得到参数更新的公式:
  
      
       
        
         
         
           w 
          
         
           j 
          
         
        
          = 
         
         
         
           w 
          
         
           j 
          
         
        
          − 
         
        
          α 
         
         
         
           ∂ 
          
          
          
            ∂ 
           
           
           
             w 
            
           
             j 
            
           
          
         
        
          J 
         
        
          ( 
         
         
         
           w 
          
         
           ⃗ 
          
         
        
          , 
         
        
          b 
         
        
          ) 
         
         
        
          b 
         
        
          = 
         
        
          b 
         
        
          − 
         
        
          α 
         
         
         
           ∂ 
          
          
          
            ∂ 
           
          
            b 
           
          
         
        
          J 
         
        
          ( 
         
         
         
           w 
          
         
           ⃗ 
          
         
        
          , 
         
        
          b 
         
        
          ) 
         
        
       
         w_j = w_j - \alpha \frac{\partial}{\partial w_j}J(\vec w, b) \\ b = b - \alpha \frac{\partial}{\partial b}J(\vec w, b) 
        
       
     wj=wj−α∂wj∂J(w,b)b=b−α∂b∂J(w,b)
 
正规方程
正规方程即最小二乘法。
由于我们要求解损失函数最小的时候对应的参数值,所以不妨将损失函数看作是参数的函数,然后对损失函数求一阶导函数,令一阶导函数等于 0,求解其极小值点,就对应着最优的参数
特点:
- 仅适用于线性回归
 - 解决最小化参数问题(同梯度下降算法),但是不需要迭代
 - 当特征较多时( > 10000),运行速度较慢
 
只要特征变量的数目并不大,标准方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
特征缩放
使用特征缩放的方法,能够使得梯度下降算法的运行速度得到提升
所谓特征缩放,就是在进行模型训练之前,对数据进行归一化操作
例如,以房价预测为例,特征又房屋面积 x 1 x_1 x1 和卧室数量 x 2 x_2 x2,因此:
p r i c e ^ = w 1 x 1 + x 2 x 2 + b \hat {price} = w_1x_1 + x_2x_2 + b price^=w1x1+x2x2+b
其中, x 1 ∈ [ 300 , 2000 ] , x 2 ∈ [ 0 , 5 ] x_1 \in [300,2000],x_2 \in [0, 5] x1∈[300,2000],x2∈[0,5]数据集:
$x_1 = 2000, x_2 = 5, price = $500K$
由此可以看出,我们的参数 w 1 w_1 w1应该较小, w 2 w_2 w2 应该较大
即,对于一个好的模型来说:
- 当特征的可能指较小时,其参数的合理值将相对较大
 - 当特征的可能指较大时,其参数的合理值将相对较小
 
当每个特征的取值范围相差较大时,特征关系与损失函数图像如下:
 
如右侧的损失函数梯度图,当我们使用梯度下降算法时,如果学习率设置不当,算法会来回左右横跳动,经过很长一段时间才会收敛到最优值

当我们使用特征缩放时,即将  
     
      
       
        
        
          x 
         
        
          1 
         
        
       
      
        x_1 
       
      
    x1和  
     
      
       
        
        
          x 
         
        
          2 
         
        
       
      
        x_2 
       
      
    x2进行重新标度,归一化到区间  
     
      
       
       
         [ 
        
       
         0 
        
       
         , 
        
       
         1 
        
       
         ] 
        
       
      
        [0,1] 
       
      
    [0,1]内,保证了两个特征拥有一个可比较的范围,从而使得损失函数梯度图更像一个圆形,便于算法能够快速收敛到最优点
 
特征缩放方法
特征缩放的目的是将一列数据变化到某个固定区间(范围)中
均值归一化
将数据归一化到区间  
     
      
       
       
         [ 
        
       
         − 
        
       
         1 
        
       
         , 
        
       
         1 
        
       
         ] 
        
       
      
        [-1,1] 
       
      
    [−1,1]内
  
      
       
        
        
          x 
         
        
          = 
         
         
          
          
            x 
           
          
            − 
           
          
            μ 
           
          
          
           
           
             x 
            
            
            
              m 
             
            
              a 
             
            
              x 
             
            
           
          
            − 
           
           
           
             x 
            
            
            
              m 
             
            
              i 
             
            
              n 
             
            
           
          
         
        
       
         x = \frac{x - \mu}{x_{max} - x_{min}} 
        
       
     x=xmax−xminx−μ
 其中, 
     
      
       
       
         μ 
        
       
      
        \mu 
       
      
    μ 是数据  
     
      
       
       
         x 
        
       
      
        x 
       
      
    x 的均值
 
Z-score 归一化
即,将数据转化为均值为0,标准差为1的分布
  
      
       
        
        
          x 
         
        
          = 
         
         
          
          
            x 
           
          
            − 
           
          
            μ 
           
          
         
           σ 
          
         
        
       
         x = \frac{x - \mu}{\sigma } 
        
       
     x=σx−μ
 其中, 
     
      
       
       
         μ 
        
       
      
        \mu 
       
      
    μ 是数据的均值, 
     
      
       
       
         σ 
        
       
      
        \sigma 
       
      
    σ 是标准差
 
特征缩放的好坏,具体取决于所有特征进行特征缩放后的取值范围是否尽量一致,以保证梯度下降算法的有效进行
梯度下降法则
如何判断梯度下降是否收敛
一般而言,在模型训练阶段,随着迭代次数的进行,损失值如下图所示:
 
可以看到的是,当迭代次数大于300时,曲线接近平行,下降的趋势非常平缓,此时意味着我们的梯度下降开始收敛了
通常,可以使用 epsilon法进行自动收敛测试,即设置收敛阈值  
     
      
       
       
         ε 
        
       
         = 
        
       
         0.001 
        
       
      
        \varepsilon = 0.001 
       
      
    ε=0.001,当损失值下降幅度小于阈值时,即认为算法开始收敛,但从实际来看,要想确定一个正确的阈值是非常困难的
如何设置学习率
如果学习率设置过大,则最终结果不容易收敛
如果学习率设置太小,则会导致算法运行较长时间
 通过绘制损失函数与迭代次数关系的图像,如果损失函数出现时而下降,时而上升,即不是一直下降的趋势,那么则表明学习率的设置可能较大(也可能是代码存在错误
因此,在实际工作中,一般会选择一系列的值不断去尝试,且在尝试的过程中,只对模型的部分数据进行有限的迭代次数,通过对比来选择最优的学习率
多项式回归
特征工程
在实际问题中,使用的模型往往比较复杂,因此有时需要利用特征工程的方法来对模型加入一些重要的特征
例如,在预测房价时,目前存在临街长度 
     
      
       
        
        
          x 
         
        
          1 
         
        
       
      
        x_1 
       
      
    x1 和深度 
     
      
       
        
        
          x 
         
        
          2 
         
        
       
      
        x_2 
       
      
    x2,因此房价预测模型为:
  
      
       
        
         
         
           f 
          
          
           
           
             w 
            
           
             ⃗ 
            
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
         
           ⃗ 
          
         
        
          ) 
         
        
          = 
         
         
         
           w 
          
         
           1 
          
         
         
         
           x 
          
         
           1 
          
         
        
          + 
         
         
         
           w 
          
         
           2 
          
         
         
         
           x 
          
         
           2 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{\vec w, b}(\vec x) = w_1x_1 + w_2x_2 + b 
        
       
     fw,b(x)=w1x1+w2x2+b
 
但是在实际中,根据生活经验,使用房屋面积作为单特征可能会更好的帮助我们进行预测,因此引入第三个变量房屋面积 
     
      
       
        
        
          x 
         
        
          3 
         
        
       
      
        x_3 
       
      
    x3,且  
     
      
       
        
        
          x 
         
        
          3 
         
        
       
         = 
        
        
        
          x 
         
        
          1 
         
        
        
        
          x 
         
        
          2 
         
        
       
      
        x_3 = x_1x_2 
       
      
    x3=x1x2,从而我们的模型转化为:
  
      
       
        
         
         
           f 
          
          
           
           
             w 
            
           
             ⃗ 
            
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
         
           ⃗ 
          
         
        
          ) 
         
        
          = 
         
         
         
           w 
          
         
           1 
          
         
         
         
           x 
          
         
           1 
          
         
        
          + 
         
         
         
           w 
          
         
           2 
          
         
         
         
           x 
          
         
           2 
          
         
        
          + 
         
         
         
           w 
          
         
           3 
          
         
         
         
           x 
          
         
           3 
          
         
        
          + 
         
        
          b 
         
        
       
         f_{\vec w, b}(\vec x) = w_1x_1 + w_2x_2 +w_3x_3 + b 
        
       
     fw,b(x)=w1x1+w2x2+w3x3+b
 这种方法叫做创建新特征
多元线性回归+特征工程
将多元线性回归与特征工程的思想结合起来,就是多项式回归的算法,这可以使我们获得更好的数据模型
对于通过面积来预测房价的例子,根据数据集的分布情况,可以看出如果使用二次函数来拟合,效果可能会更好,如下图:

但是考虑到二次函数在达到最高点之后会再次下降,而实际情况中房屋面积越大,价格应该是越高,因此对模型进行调整,改为三次函数模型

同时,在加入高次幂时,要记得对使用特征缩放得方法,保证我们的梯度下降算法有效的进行
除此之外,由于观察到随着面积的增长,价格增长的趋势不在那么陡峭,因此也可以考虑使用平方根函数




















