文章目录
用核函数衡量相似度
起初,在逻辑回归中如果我们遇到像下图这样看起来较复杂的非线性边界:
 
 显然,只用线性的
    
     
      
       
        
         θ
        
        
         0
        
       
       
        +
       
       
        
         θ
        
        
         1
        
       
       
        
         x
        
        
         1
        
       
       
        +
       
       
        
         θ
        
        
         2
        
       
       
        
         x
        
        
         2
        
       
      
      
       \theta_0+\theta_1x_1+\theta_2x_2
      
     
    θ0+θ1x1+θ2x2无法划分这两个类别的样本,一种做法是向表达式中添加一些更高次的项,比如
    
     
      
       
        
         x
        
        
         1
        
        
         2
        
       
       
        ,
       
       
        
         x
        
        
         1
        
       
       
        
         x
        
        
         2
        
       
       
        ,
       
       
        
         x
        
        
         1
        
        
         6
        
       
       
        
         x
        
        
         2
        
        
         7
        
       
      
      
       x_1^2,x_1x_2,x_1^6x_2^7
      
     
    x12,x1x2,x16x27等等,再此基础之上进行逻辑回归。
但是,这样的高次式有无限多可能,我们没法直观地判断出到底是 x 1 2 x_1^2 x12更好还是 x 1 x 2 x_1x_2 x1x2更好,在特征值数目更多的情况下这样的情况会更加严重。我们需要一个更有效的构造特征值的方式。
最终,相似度脱颖而出,成为我们构造特征值的上好选择。相似度描述的是两个向量之间的接近程度,有许多种函数都可以实现这个功能。在这里,我们选用的是高斯函数,定义两个向量
    
     
      
       
        
         x
        
        
         ⃗
        
       
      
      
       \vec{x}
      
     
    x和
    
     
      
       
        
         l
        
        
         ⃗
        
       
      
      
       \vec{l}
      
     
    l之间的相似度为
     
      
       
        
         f
        
        
         =
        
        
         similarity
        
        
         (
        
        
         
          x
         
         
          ⃗
         
        
        
         ,
        
        
         
          l
         
         
          ⃗
         
        
        
         )
        
        
         =
        
        
         exp
        
        
         
        
        
         (
        
        
         −
        
        
         
          
           ∣
          
          
           ∣
          
          
           
            x
           
           
            ⃗
           
          
          
           −
          
          
           
            l
           
           
            ⃗
           
          
          
           ∣
          
          
           
            ∣
           
           
            2
           
          
         
         
          
           2
          
          
           
            σ
           
           
            2
           
          
         
        
        
         )
        
       
       
         f=\text{similarity}(\vec{x},\vec{l})=\exp(-\frac{||\vec{x}-\vec{l}||^2}{2\sigma^2}) 
       
      
     f=similarity(x,l)=exp(−2σ2∣∣x−l∣∣2)
 这样的函数,我们就称为核函数,核函数的函数值随着周围点距离核(也就是
    
     
      
       
        
         l
        
        
         ⃗
        
       
      
      
       \vec{l}
      
     
    l)的距离和参数
    
     
      
       
        σ
       
      
      
       \sigma
      
     
    σ而改变。距离核越远,函数值越小,而
    
     
      
       
        σ
       
      
      
       \sigma
      
     
    σ控制核函数的变化速率,
    
     
      
       
        σ
       
      
      
       \sigma
      
     
    σ越大,核函数的变化越平缓,反之越陡峭。
 
利用相似度构建回归
我们可以看到,通过核函数,我们就可以构造出一个圆形且从圆心向无穷远处递减的区域。如果我们将多个核函数组合在一起,就可以构造出一个复杂的非线性决策边界。那么,如何选取核函数的核呢?
一个简单的做法就是,把所有样本点都作为核,一个样本的特征值就是它与所有样本点的相似度。具体来讲,我们把一个样本向量
    
     
      
       
        
         
          x
         
         
          i
         
        
        
         ⃗
        
       
      
      
       \vec{x_i}
      
     
    xi的特征值向量
    
     
      
       
        
         
          f
         
         
          i
         
        
        
         ⃗
        
       
      
      
       \vec{f_i}
      
     
    fi定义为
 
     
      
       
        
         
          
           f
          
          
           i
          
         
         
          ⃗
         
        
        
         =
        
        
         
          [
         
         
          
           
            
             
              
               similarity
              
              
               (
              
              
               
                
                 x
                
                
                 i
                
               
               
                ⃗
               
              
              
               ,
              
              
               
                
                 x
                
                
                 1
                
               
               
                ⃗
               
              
              
               )
              
             
            
           
          
          
           
            
             
              
               similarity
              
              
               (
              
              
               
                
                 x
                
                
                 i
                
               
               
                ⃗
               
              
              
               ,
              
              
               
                
                 x
                
                
                 2
                
               
               
                ⃗
               
              
              
               )
              
             
            
           
          
          
           
            
             
              ⋮
             
             
              
             
            
           
          
          
           
            
             
              
               similarity
              
              
               (
              
              
               
                
                 x
                
                
                 i
                
               
               
                ⃗
               
              
              
               ,
              
              
               
                
                 x
                
                
                 m
                
               
               
                ⃗
               
              
              
               )
              
             
            
           
          
         
         
          ]
         
        
       
       
         \vec{f_i}= \left[\begin{matrix} \text{similarity}(\vec{x_i},\vec{x_1})\\ \text{similarity}(\vec{x_i},\vec{x_2})\\ \vdots\\ \text{similarity}(\vec{x_i},\vec{x_m})\\ \end{matrix}\right] 
       
      
     fi=⎣⎢⎢⎢⎡similarity(xi,x1)similarity(xi,x2)⋮similarity(xi,xm)⎦⎥⎥⎥⎤
 而我们的假设函数
    
     
      
       
        
         h
        
        
         θ
        
       
      
      
       h_\theta
      
     
    hθ则变为
    
     
      
       
        
         θ
        
        
         T
        
       
       
        f
       
      
      
       \theta^Tf
      
     
    θTf,即
 
     
      
       
        
         
          θ
         
         
          0
         
        
        
         
          f
         
         
          0
         
        
        
         +
        
        
         
          θ
         
         
          1
         
        
        
         
          f
         
         
          1
         
        
        
         +
        
        
         ⋯
        
        
         +
        
        
         
          θ
         
         
          m
         
        
        
         
          f
         
         
          m
         
        
       
       
         \theta_0f_0+\theta_1f_1+\cdots+\theta_mf_m 
       
      
     θ0f0+θ1f1+⋯+θmfm
 所以我们需要最小化的代价函数
    
     
      
       
        J
       
       
        (
       
       
        θ
       
       
        )
       
      
      
       J(\theta)
      
     
    J(θ)变为
 
     
      
       
        
         C
        
        
         
          ∑
         
         
          
           i
          
          
           =
          
          
           1
          
         
         
          m
         
        
        
         [
        
        
         
          y
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
        
         
          cost
         
         
          1
         
        
        
         (
        
        
         
          θ
         
         
          T
         
        
        
         
          f
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
        
         )
        
        
         +
        
        
         (
        
        
         1
        
        
         −
        
        
         
          y
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
        
         )
        
        
         
          cost
         
         
          0
         
        
        
         (
        
        
         
          θ
         
         
          T
         
        
        
         
          f
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
        
         )
        
        
         ]
        
        
         +
        
        
         
          1
         
         
          2
         
        
        
         
          ∑
         
         
          
           j
          
          
           =
          
          
           1
          
         
         
          m
         
        
        
         
          θ
         
         
          j
         
         
          2
         
        
       
       
         C\sum_{i=1}^m[y^{(i)}\text{cost}_1(\theta^Tf^{(i)})+(1-y^{(i)})\text{cost}_0(\theta^Tf^{(i)})]+\frac{1}{2}\sum_{j=1}^m\theta_j^2 
       
      
     Ci=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑mθj2
 看起来,似乎逻辑回归一样可以运用核函数。但根据吴恩达所说,核函数搭配逻辑回归的运算速度很慢,现有的许多优化都是针对SVM+核函数的,这两者搭配在一起才能事半功倍。
关于参数
和别的回归类似,我们可以通过控制参数来调整模型的偏差与方差,
    
     
      
       
        C
       
      
      
       C
      
     
    C的作用在上一篇博客已经讲过了,而核函数参数
    
     
      
       
        σ
       
      
      
       \sigma
      
     
    σ的作用可以很容易的观察出来:当
    
     
      
       
        σ
       
      
      
       \sigma
      
     
    σ较小时,核函数非常陡峭,只允许很小的偏差,所以是个低偏差高方差模型,反之是个高偏差低方差模型。
 










