引言
在机器学习中,逻辑损失函数(Logistic Loss Function)是用于训练逻辑回归模型的一种损失函数。逻辑回归是一种广泛用于分类问题的模型,特别是用于二分类问题,它的目标是预测一个实例属于两个类别中的一个的概率
文章目录
- 引言
- 一、逻辑损失函数的定义
- 二、sigmoid函数定义
- 三、逻辑损失函数的解释
- 四、探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数
- 4.1 导入第三方库
- 4.2 平方误差是否适用于逻辑回归
- 4.3 逻辑损失函数
- 4.4 总结
 
一、逻辑损失函数的定义
 
      
       
        
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
        
          − 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          log 
         
        
           
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
          − 
         
        
          ( 
         
        
          1 
         
        
          − 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          log 
         
        
           
         
        
          ( 
         
        
          1 
         
        
          − 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
       
         \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = -y^{(i)} \log(f_{w,b}(x^{(i)})) - (1 - y^{(i)}) \log(1 - f_{w,b}(x^{(i)})) 
        
       
     loss(fw,b(x(i)),y(i))=−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))
 其中:
-  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
       
         f_{w,b}(x^{(i)}) 
        
       
     fw,b(x(i))是模型对于第 
      
       
        
        
          i 
         
        
       
         i 
        
       
     i个样本的预测,通常是经过sigmoid函数转换后的输出,表示样本属于正类(通常标记为1)的概率
- y ( i ) y^{(i)} y(i)是第 i i i个样本的实际标签,取值为0或1
- log  \log log是自然对数
二、sigmoid函数定义
f w , b ( x ( i ) ) = 1 1 + e − ( w ⋅ x ( i ) + b ) f_{w,b}(x^{(i)}) = \frac{1}{1 + e^{-(w \cdot x^{(i)} + b)}} fw,b(x(i))=1+e−(w⋅x(i)+b)1
三、逻辑损失函数的解释
- 当实际标签 y ( i ) = 1 y^{(i)} = 1 y(i)=1时,损失函数变为 − log  ( f w , b ( x ( i ) ) ) -\log(f_{w,b}(x^{(i)})) −log(fw,b(x(i)))。如果模型预测的概率接近1,则损失接近0;如果模型预测的概率接近0,则损失非常大
- 当实际标签 y ( i ) = 0 y^{(i)} = 0 y(i)=0时,损失函数变为 − log  ( 1 − f w , b ( x ( i ) ) ) -\log(1 - f_{w,b}(x^{(i)})) −log(1−fw,b(x(i)))。如果模型预测的概率接近0,则损失接近0;如果模型预测的概率接近1,则损失非常大
逻辑损失函数的特点是它对于预测错误的情况给予较大的惩罚,而在预测正确时则给予较小的损失
这使得逻辑回归非常适合于分类任务,因为它能够通过最小化损失函数来学习如何正确地分类样本
在训练过程中,我们通常不是只计算单个样本的损失,而是计算整个训练集上所有样本的平均损失,即成本函数(Cost Function):
  
      
       
        
        
          J 
         
        
          ( 
         
        
          w 
         
        
          , 
         
        
          b 
         
        
          ) 
         
        
          = 
         
         
         
           1 
          
         
           m 
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            1 
           
          
         
           m 
          
         
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
       
         J(w, b) = \frac{1}{m} \sum_{i=1}^{m} \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) 
        
       
     J(w,b)=m1i=1∑mloss(fw,b(x(i)),y(i))
其中 m m m是训练集中样本的数量。通过优化成本函数(例如,使用梯度下降算法),我们可以找到最佳的模型参数 w w w和 b b b
四、探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数
4.1 导入第三方库
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from plt_logistic_loss import  plt_logistic_cost, plt_two_logistic_loss_curves, plt_simple_example
from plt_logistic_loss import soup_bowl, plt_logistic_squared_error
plt.style.use('./deeplearning.mplstyle')
4.2 平方误差是否适用于逻辑回归

回想在线性回归中,我们使用了平方误差成本函数:一个变量的平方误差成本方程是:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          w 
         
        
          , 
         
        
          b 
         
        
          ) 
         
        
          = 
         
         
         
           1 
          
          
          
            2 
           
          
            m 
           
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            0 
           
          
          
          
            m 
           
          
            − 
           
          
            1 
           
          
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          − 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
         
         
           ) 
          
         
           2 
          
         
        
       
         J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 
        
       
     J(w,b)=2m1i=0∑m−1(fw,b(x(i))−y(i))2
 其中
  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
        
          w 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          + 
         
        
          b 
         
        
       
         f_{w,b}(x^{(i)}) = wx^{(i)} + b 
        
       
     fw,b(x(i))=wx(i)+b
 回想一下,平方误差成本有一个很好的性质,那就是沿着成本的导数可以找到最小值。
soup_bowl()
输出结果:
 
这个成本函数对于线性回归很有效,自然也会考虑将其用于逻辑回归。然而,现在 
     
      
       
        
        
          f 
         
         
         
           w 
          
         
           , 
          
         
           b 
          
         
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        f_{w,b}(x) 
       
      
    fw,b(x)有一个非线性组件,即sigmoid函数: 
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
        
          sigmoid 
         
        
          ( 
         
        
          w 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          + 
         
        
          b 
         
        
          ) 
         
        
       
         f_{w,b}(x^{(i)}) = \text{sigmoid}(wx^{(i)} + b) 
        
       
     fw,b(x(i))=sigmoid(wx(i)+b)让我们在之前的实验例子中使用平方误差成本,现在包括sigmoid函数
 这是我们的训练数据:
x_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.longdouble)
y_train = np.array([0,  0, 0, 1, 1, 1], dtype=np.longdouble)
plt_simple_example(x_train, y_train)
输出结果:
 
现在,让我们使用平方误差成本得到一个表面图的成本:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          w 
         
        
          , 
         
        
          b 
         
        
          ) 
         
        
          = 
         
         
         
           1 
          
          
          
            2 
           
          
            m 
           
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            0 
           
          
          
          
            m 
           
          
            − 
           
          
            1 
           
          
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          − 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
         
         
           ) 
          
         
           2 
          
         
        
       
         J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 
        
       
     J(w,b)=2m1i=0∑m−1(fw,b(x(i))−y(i))2
 其中
  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
        
          sigmoid 
         
        
          ( 
         
        
          w 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          + 
         
        
          b 
         
        
          ) 
         
        
       
         f_{w,b}(x^{(i)}) = \text{sigmoid}(wx^{(i)} + b) 
        
       
     fw,b(x(i))=sigmoid(wx(i)+b)
plt.close('all')
plt_logistic_squared_error(x_train, y_train)
plt.show()
输出结果:
 
虽然这产生了一个非常有趣的图,但上面的表面图并不像线性回归的“汤碗”那样平滑!
逻辑回归需要一个更适合其非线性特性的成本函数。这从损失函数开始,如下所述。
4.3 逻辑损失函数
逻辑回归使用一个更适合于分类任务的损失函数,其中目标值为0或1,而不是任何数字。
- 定义说明:在本课程中,使用以下定义:
- 损失是单个示例与其目标值差异的度量,而
- 成本是训练集上损失的度量
定义如下:
  
      
       
        
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
       
         \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) 
        
       
     loss(fw,b(x(i)),y(i))
 是单个数据点的成本,即:
  
      
       
        
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
         
         
           y 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
         
         
           { 
          
          
           
            
             
              
              
                − 
               
              
                log 
               
              
                 
               
              
                ( 
               
               
               
                 f 
                
                
                
                  w 
                 
                
                  , 
                 
                
                  b 
                 
                
               
              
                ( 
               
               
               
                 x 
                
                
                
                  ( 
                 
                
                  i 
                 
                
                  ) 
                 
                
               
              
                ) 
               
              
                ) 
               
              
             
            
            
             
              
              
                if  
               
               
               
                 y 
                
                
                
                  ( 
                 
                
                  i 
                 
                
                  ) 
                 
                
               
              
                = 
               
              
                1 
               
              
             
            
           
           
            
             
              
              
                log 
               
              
                 
               
              
                ( 
               
              
                1 
               
              
                − 
               
               
               
                 f 
                
                
                
                  w 
                 
                
                  , 
                 
                
                  b 
                 
                
               
              
                ( 
               
               
               
                 x 
                
                
                
                  ( 
                 
                
                  i 
                 
                
                  ) 
                 
                
               
              
                ) 
               
              
                ) 
               
              
             
            
            
             
              
              
                if  
               
               
               
                 y 
                
                
                
                  ( 
                 
                
                  i 
                 
                
                  ) 
                 
                
               
              
                = 
               
              
                0 
               
              
             
            
           
          
         
        
       
         \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = \begin{cases} -\log(f_{w,b}(x^{(i)})) & \text{if } y^{(i)} = 1 \\ \log(1 - f_{w,b}(x^{(i)})) & \text{if } y^{(i)} = 0 \end{cases} 
        
       
     loss(fw,b(x(i)),y(i))={−log(fw,b(x(i)))log(1−fw,b(x(i)))if y(i)=1if y(i)=0
  
     
      
       
        
        
          f 
         
         
         
           w 
          
         
           , 
          
         
           b 
          
         
        
       
         ( 
        
        
        
          x 
         
         
         
           ( 
          
         
           i 
          
         
           ) 
          
         
        
       
         ) 
        
       
      
        f_{w,b}(x^{(i)}) 
       
      
    fw,b(x(i))是模型的预测,而 
     
      
       
        
        
          y 
         
         
         
           ( 
          
         
           i 
          
         
           ) 
          
         
        
       
      
        y^{(i)} 
       
      
    y(i)是目标值。
  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          = 
         
        
          g 
         
        
          ( 
         
        
          w 
         
        
          ⋅ 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          + 
         
        
          b 
         
        
          ) 
         
        
       
         f_{w,b}(x^{(i)}) = g(w \cdot x^{(i)} + b) 
        
       
     fw,b(x(i))=g(w⋅x(i)+b)
其中函数 g g g 是
sigmoid函数
这个损失函数的特点是它使用两个单独的曲线。一个用于目标为零的情况(  
     
      
       
       
         y 
        
       
         = 
        
       
         0 
        
       
      
        y=0 
       
      
    y=0),另一个用于目标为一的情况( 
     
      
       
       
         y 
        
       
         = 
        
       
         1 
        
       
      
        y=1 
       
      
    y=1)。结合起来,这些曲线提供了损失函数所需的行为,即在预测与目标匹配时为零,在预测与目标不同时迅速增加值。
 考虑下面的曲线:
plt_two_logistic_loss_curves()
输出结果:
 
结合起来的曲线与平方误差损失的二次曲线相似
- x轴是  
      
       
        
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
       
         f_{w,b} 
        
       
     fw,b,这是sigmoid函数的输出
- sigmoid输出严格在0和1之间
 上面的损失函数可以重写,使其更容易实现:
 loss ( f w , b ( x ( i ) ) , y ( i ) ) = ( − y ( i ) log  ( f w , b ( x ( i ) ) ) − ( 1 − y ( i ) ) log  ( 1 − f w , b ( x ( i ) ) ) \text{loss}(f_{w,b}(x^{(i)}), y^{(i)}) = (-y^{(i)} \log(f_{w,b}(x^{(i)})) - (1 - y^{(i)}) \log(1 - f_{w,b}(x^{(i)})) loss(fw,b(x(i)),y(i))=(−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))
这个方程看起来相当复杂。但是当你考虑到  
     
      
       
        
        
          y 
         
         
         
           ( 
          
         
           i 
          
         
           ) 
          
         
        
       
      
        y^{(i)} 
       
      
    y(i) 只能有两个值,0和1时,它就不那么令人生畏了。然后我们可以将方程分为两部分:
 当 
     
      
       
        
        
          y 
         
         
         
           ( 
          
         
           i 
          
         
           ) 
          
         
        
       
         = 
        
       
         0 
        
       
      
        y^{(i)}=0 
       
      
    y(i)=0 时,左边的项被消去:
  
      
       
        
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
        
          0 
         
        
          ) 
         
        
          = 
         
        
          ( 
         
        
          − 
         
        
          ( 
         
        
          0 
         
        
          ) 
         
        
          log 
         
        
           
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
          − 
         
        
          ( 
         
        
          1 
         
        
          − 
         
        
          0 
         
        
          ) 
         
        
          log 
         
        
           
         
        
          ( 
         
        
          1 
         
        
          − 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
          ) 
         
        
          = 
         
        
          − 
         
        
          log 
         
        
           
         
        
          ( 
         
        
          1 
         
        
          − 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
       
         \text{loss}(f_{w,b}(x^{(i)}), 0) = (-(0) \log(f_{w,b}(x^{(i)})) - (1-0) \log(1 - f_{w,b}(x^{(i)}))) = -\log(1 - f_{w,b}(x^{(i)})) 
        
       
     loss(fw,b(x(i)),0)=(−(0)log(fw,b(x(i)))−(1−0)log(1−fw,b(x(i))))=−log(1−fw,b(x(i)))
 当 
     
      
       
        
        
          y 
         
         
         
           ( 
          
         
           i 
          
         
           ) 
          
         
        
       
         = 
        
       
         1 
        
       
      
        y^{(i)}=1 
       
      
    y(i)=1时,右边的项被消去:
  
      
       
        
        
          loss 
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          , 
         
        
          1 
         
        
          ) 
         
        
          = 
         
        
          ( 
         
        
          − 
         
        
          ( 
         
        
          1 
         
        
          ) 
         
        
          log 
         
        
           
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
          − 
         
        
          ( 
         
        
          1 
         
        
          − 
         
        
          1 
         
        
          ) 
         
        
          log 
         
        
           
         
        
          ( 
         
        
          1 
         
        
          − 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
          ) 
         
        
          = 
         
        
          − 
         
        
          log 
         
        
           
         
        
          ( 
         
         
         
           f 
          
          
          
            w 
           
          
            , 
           
          
            b 
           
          
         
        
          ( 
         
         
         
           x 
          
          
          
            ( 
           
          
            i 
           
          
            ) 
           
          
         
        
          ) 
         
        
          ) 
         
        
       
         \text{loss}(f_{w,b}(x^{(i)}), 1) = (-(1) \log(f_{w,b}(x^{(i)})) - (1-1) \log(1 - f_{w,b}(x^{(i)}))) = -\log(f_{w,b}(x^{(i)})) 
        
       
     loss(fw,b(x(i)),1)=(−(1)log(fw,b(x(i)))−(1−1)log(1−fw,b(x(i))))=−log(fw,b(x(i)))
 有了这个新的逻辑损失函数,我们可以产生一个包含所有示例损失的成本函数。现在,让我们来看看上面考虑的简单示例的成本与参数曲线:
plt.close('all')
cst = plt_logistic_cost(x_train, y_train)
输出结果:
 
- 这条曲线非常适合梯度下降
- 它没有平台,局部最小值或间断
- 它不像平方误差那样是一个碗形
- 成本和成本的日志都被绘制出来,以阐明当成本很小时,曲线有斜率并且继续下降
4.4 总结
- 确定平方误差损失函数不适用于分类任务
- 开发并检查适用于分类任务的逻辑损失函数



















