自学内容网 自学内容网

时间序列预测(四)——损失函数(Lossfunction)

目录

1、回归任务常用的损失函数

均方误差(Mean Squared Error, MSE)

平均绝对误差(Mean Absolute Error, MAE)

均方对数误差(Mean Squared Logarithmic Error, MSLE)

Huber Loss(MSE和 MAE结合,又称 Smooth L1 损失)    

均方对数误差损失(Mean Squared Logarithmic Error, MSLE)

2. 分类任务常用的损失函数

交叉熵损失(Cross-Entropy Loss)

负对数似然损失(Negative Log-Likelihood, NLL Loss)

Hinge Loss(合页损失)

二元交叉熵损失(Binary Cross Entropy Loss, BCE)

带 Logits 的二元交叉熵损失(Binary Cross Entropy with Logits, BCEWithLogits)

3. 使用方法


损失函数是衡量模型预测值与真实值之间差异的函数,指导模型在训练过程中不断优化。根据任务类型和数据分布不同,常用的损失函数分为回归损失函数(如线性回归模型用到的)和分类损失函数两大类。

1、回归任务常用的损失函数

  • 均方误差(Mean Squared Error, MSE)
  • 定义:
    适用场景:用于回归问题,尤其在预测目标值为连续变量时。 优点:对大误差敏感,能够惩罚较大的偏差,有助于收敛。 缺点:对异常值过于敏感,容易造成过拟合。PyTorch 实现

    import torch.nn as nn
    
    criterion = nn.MSELoss()#定义
    loss = criterion(predicted_outputs, true_outputs)#使用前面定义的损失函数来计predicted_outputs(预测输出)和true_outputs(真实输出)之间的损失值
    
  • 平均绝对误差(Mean Absolute Error, MAE)
  • 定义:
    适用场景:用于回归问题,尤其是存在异常值的情况下。 优点:对异常值不敏感,较为稳健。 缺点:对较小误差不够敏感,不容易收敛到全局最优。PyTorch 实现

    import torch.nn as nn
    criterion = nn.L1Loss()
    loss = criterion(predicted_outputs, true_outputs)
    
  • 均方对数误差(Mean Squared Logarithmic Error, MSLE)
  • 定义:
    适用场景:适用于预测值呈指数增长的数据(如用户增长、销量增长等)。 优点:能够降低预测值较小的数据误差,关注相对误差。 缺点:对负值不适用,对数据平滑性要求高。PyTorch 实现

    import torch.nn as nn
    
    criterion = nn.MSELoss()
    loss = criterion(predicted_outputs, true_outputs)
    

  • Huber Loss(MSE和 MAE结合,又称 Smooth L1 损失    

        定义:当误差小于阈值 δ 时,使用 MSE,否则使用 MAE。

        适用场景:适用于对异常值较为敏感的回归问题。 优点:综合了 MSE 和 MAE 的优点,对小误差使用平方惩罚,对大误差使用线性惩罚。 缺点:需选择合适的阈值 δ。PyTorch 实现:        

import torch.nn as nn
criterion = nn.SmoothL1Loss()
loss = criterion(predicted_outputs, true_outputs)
  • 均方对数误差损失(Mean Squared Logarithmic Error, MSLE)

        定 义:         适用场景:主要用于回归任务,尤其是预测值和真实值都为正且数据尺度差距较大的场景。优点:对异常值的惩罚较小,更关注小于 1 的误差,适合衡量增长率或指数变化的预测。缺点:要求预测值和真实值都为非负值。PyTorch 没有内置的 MSLE,但可以通过自定义公式来实现。PyTorch 实现:  

def msle_loss(pred, true):
    return torch.mean((torch.log(1 + pred) - torch.log(1 + true)) ** 2)

loss = msle_loss(predicted_outputs, true_outputs)

2. 分类任务常用的损失函数

  • 交叉熵损失(Cross-Entropy Loss)
  • 定义:
    适用场景:适用于二分类和多分类任务,常与 Softmax 一起使用。 优点:对概率分布差异敏感,能够有效提高分类准确率。 缺点:对预测概率非常小的数据较为敏感。PyTorch 实现:  

    import torch.nn as nn
    criterion = nn.CrossEntropyLoss()
    loss = criterion(predicted_outputs, true_labels)
    
  • 负对数似然损失(Negative Log-Likelihood, NLL Loss)
  • 定义:
    适用场景:用于多分类任务,特别是在概率分布已知或 Softmax 输出时。 优点:能够直接计算概率分布,提高模型的概率表达能力。 缺点:通常需要配合 Softmax 函数使用。PyTorch 实现:  

    import torch.nn as nn
    criterion = nn.NLLLoss()
    log_probs = nn.LogSoftmax(dim=1)(predicted_outputs)#需要先将输出经过 nn.LogSoftmax
    loss = criterion(log_probs, true_labels)
    
  • Hinge Loss(合页损失)
  • 定义:
    适用场景:常用于支持向量机(SVM)等二分类任务。 优点:对分类边界敏感,能够强化边界分类效果。 缺点:仅适用于二分类,且可能导致不可微的问题。PyTorch 没有直接的 Hinge Loss,但可以通过以下公式自定义。PyTorch 实现:  

    def hinge_loss(pred, true):
        return torch.mean(torch.clamp(1 - pred * true, min=0))
    
    loss = hinge_loss(predicted_outputs, true_labels)
    
  • 二元交叉熵损失(Binary Cross Entropy Loss, BCE)

  • 定义:

     

    适用场景:用于二分类任务,尤其适合 Sigmoid 输出的概率值。优点:标准的二分类损失函数,易于理解和实现。缺点:对偏斜数据敏感(类别不均衡时效果不佳),通常需要通过采样或调整权重来应对不平衡问题。PyTorch 实现:  

    import torch.nn as nn
    
    criterion = nn.BCELoss()
    loss = criterion(sigmoid_outputs, true_labels)  # 假设 sigmoid_outputs 已经经过 Sigmoid
    

  • 带 Logits 的二元交叉熵损失(Binary Cross Entropy with Logits, BCEWithLogits)
  • 定义:在 BCE 的基础上直接对模型输出进行 Sigmoid 操作,适合未经 Sigmoid 的原始输出(logits)。

    适用场景:二分类任务,适合直接使用模型的输出值(未经过 Sigmoid 激活的 logits)。优点:将 Sigmoid 和 BCE 结合在一个函数中,计算更稳定,避免了数值精度问题。缺点:仅适用于二分类任务。PyTorch 实现:  

    import torch.nn as nn
    criterion = nn.BCEWithLogitsLoss()
    loss = criterion(predicted_outputs, true_labels)  # predicted_outputs 为 logits
    

3. 使用方法

  • 根据任务类型选择适合的损失函数。回归任务通常使用 MSE 或 MAE,分类任务则多使用交叉熵损失。对于一些复杂任务,可以通过组合多个损失函数来平衡模型效果。
  • 在 PyTorch 中,定义损失函数后,只需将模型的预测输出和真实值输入损失函数即可计算损失。

 别忘了给这篇文章点个赞哦,非常感谢。我也正处于学习的过程,可能会有错,如果有问题,欢迎在评论区留言讨论,一起学习!

a89ae1f052204243ad7682a9c9d8732f.png


原文地址:https://blog.csdn.net/qq_47885795/article/details/142923194

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!