损失函数-二分类和多分类

二分类和多分类的损失函数

二分类

  • 损失函数
    L ( y , y ^ ) = − ( y l o g ( y ^ ) ) + ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) = -(ylog(\hat{y})) + (1-y)log(1-\hat{y}) L(y,y^)=−(ylog(y^))+(1−y)log(1−y^)

    其中真实标签表示为y(取值为 0 或 1),预测概率表示为 y ^ \hat{y} y^(取值在 0 到 1 之间)

  • 代码

    import torch
    import torch.nn as nn

    criterion = nn.BCELoss() # 或者使用 nn.BCEWithLogitsLoss() BCEWithLogitsLoss可以直接接收logit输出

    假设模型的输出 logits

    logits = torch.tensor([0.2, 0.8, 0.5, 0.1]) #shape: (4, 1)
    predicted_probabilities = torch.sigmoid(logits) #shape: (4, 1)

    真实标签

    labels = torch.tensor([0.0, 1.0, 1.0, 0.0]) #shape: (4, 1)

    计算损失

    loss = criterion(predicted_probabilities, labels)
    print("Loss:", loss.item())

  • 可视化损失值
    对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个正样本来说:
    l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=−log(y^)
    对于单个负样本来说:
    l o s s = − l o g ( 1 − y ^ ) loss = -log(1-\hat{y}) loss=−log(1−y^)
    从这个公式我们可以反推模型对正样本预测的概率为:
    h i t p o s = e − l o s s hit_{pos} = e^{-loss} hitpos=e−loss
    对负样本预测的概率为:
    h i t n e g = 1 − e − l o s s hit_{neg} = 1-e^{-loss} hitneg=1−e−loss
    这个hit就比较形象了,$hit_{pos}$越接近1,说明正样本的预测效果效果越好,$hit_{neg}$越接近0,说明负样本的预测效果效果越好

多分类

  • 损失函数
    L ( y , y ^ ) = − ∑ c = 1 C y l o g ( y ^ ) L(y,\hat{y}) = -\sum_{c=1}^Cylog(\hat{y}) L(y,y^)=−c=1∑Cylog(y^)
    其中真实标签表示为y(取值为 0 或 1,表示是否属于第c类),预测概率表示为$\hat{y}$ (取值在 0 到 1 之间)

  • 代码

    import torch
    import torch.nn as nn

    criterion = nn.CrossEntropyLoss()

    假设模型的输出 logits(未经过 sigmoid)

    logits = torch.tensor([[1.0, 2.0], # 类别 0 和 1 的 logits
    [0.0, 1.0],
    [0.5, 0.5],
    [0.0, 0.0]]) # shape:(4,2)

    真实标签,格式为类别索引

    0 表示第一个类别,1 表示第二个类别

    labels = torch.tensor([1, 1, 0, 0]) # shape:(1,4)

    计算损失

    loss = criterion(logits, labels)

    print("Loss:", loss.item())

  • 可视化损失值
    对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个样本来说:
    l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=−log(y^)
    从这个公式我们可以反推模型对当前样本的正确类别预测的概率为:
    h i t = e − l o s s hit = e^{-loss} hit=e−loss
    这个hit就比较形象了,hit越接近1,说明效果越好

二分类和多分类区别

  • 从损失函数的物理含义上来看,二分类的损失函数不仅希望正样本输出概率接近1,并且希望负样本的输出概率接近0;而多分类的损失函数仅仅希望正样本输出概率接近1,对于负样本其实没有约束
  • 对于二分类问题:如果你希望模型不仅能找出正样本,而且筛掉副样本,就用二分类损失。如果你仅仅希望找出正样本而不管负样本,多分类的损失也能用。

多分类问题中评价问题

TP(True Positive):真实标签为正类,模型预测为正类的样本数量。

TN(True Negative):真实标签为负类,模型预测为负类的样本数量。

FP(False Positive):真实标签为负类,但模型预测为正类的样本数量。

FN(False Negative):真实标签为正类,但模型预测为负类的样本数量。

  • 准确率acc

    关心模型预测的能力
    a c c = T P + T N T P + F P + F N + T N acc = \frac{TP+TN}{TP+FP+FN+TN} acc=TP+FP+FN+TNTP+TN

  • 精准率pre

    关心模型预测负样本能力
    p r e = T P T P + F P pre = \frac{TP}{TP+FP} pre=TP+FPTP

  • 召回率Recall

    关心模型预测正样本的能力
    r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP

相关推荐
Python_Study2025几秒前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构
一只大侠的侠4 分钟前
【工业AI热榜】LSTM+GRU融合实战:设备故障预测准确率99.3%,附开源数据集与完整代码
人工智能·gru·lstm
weisian15111 分钟前
入门篇--知名企业-26-华为-2--华为VS阿里:两种科技路径的较量与共生
人工智能·科技·华为·阿里
棒棒的皮皮18 分钟前
【深度学习】YOLO模型精度优化 Checklist
人工智能·深度学习·yolo·计算机视觉
微尘hjx18 分钟前
【数据集 01】家庭室内烟火数据集(按比例划分训练、验证、测试)包含训练好的yolo11/yolov8模型
深度学习·yolov8·yolo11·训练模型·烟火数据集·家庭火灾数据集·火灾数据集
高洁0125 分钟前
CLIP 的双编码器架构是如何优化图文关联的?(2)
python·深度学习·机器学习·知识图谱
线束线缆组件品替网25 分钟前
Bulgin 防水圆形线缆在严苛环境中的工程实践
人工智能·数码相机·自动化·软件工程·智能电视
Cherry的跨界思维31 分钟前
【AI测试全栈:Vue核心】22、从零到一:Vue3+ECharts构建企业级AI测试可视化仪表盘项目实战
vue.js·人工智能·echarts·vue3·ai全栈·测试全栈·ai测试全栈
冬奇Lab32 分钟前
【Cursor进阶实战·07】OpenSpec实战:告别“凭感觉“,用规格驱动AI编程
人工智能·ai编程
玖疯子35 分钟前
2025年总结框架
人工智能