当前位置: 首页 > news >正文

【机器学习笔记 Ⅱ】8 多标签和多类别

多标签分类(Multi-label Classification) vs 多类别分类(Multi-class Classification)

以下是两者的核心区别、应用场景及技术实现的系统对比:


1. 定义与核心区别

特性多类别分类(Multi-class)多标签分类(Multi-label)
标签性质类别互斥(一个样本仅属于一个类别)类别独立(一个样本可同时属于多个类别)
输出形式单标签(如“猫”或“狗”)多标签(如“猫”和“阳光”同时存在)
数学表达One-hot向量(只有一个1,其余为0)二进制向量(多个位置可为1)
示例任务MNIST手写数字识别(0~9)图像标签(“人物+沙滩+日落”)

2. 应用场景对比

(1) 多类别分类

  • 场景:目标类别互斥,必须选择唯一答案。
    • 手写数字识别(0~9)
    • 新闻主题分类(政治/经济/体育)
    • 垃圾邮件检测(垃圾/非垃圾)

(2) 多标签分类

  • 场景:目标属性可同时存在。
    • 图像标注(“人物+狗+公园”)
    • 电影类型分类(“科幻+喜剧”)
    • 医学诊断(“糖尿病+高血压”)

3. 模型输出与损失函数

组件多类别分类多标签分类
输出层激活函数Softmax(概率和为1)Sigmoid(每个类别独立概率)
损失函数分类交叉熵(Categorical Cross-Entropy)二元交叉熵(Binary Cross-Entropy)
预测解码argmax取概率最高的类别设定阈值(如0.5),概率超阈值的标签均选中

代码对比

# 多类别分类(Softmax + CCE)
model.add(Dense(10, activation='softmax'))  # MNIST 10类
model.compile(loss='categorical_crossentropy')# 多标签分类(Sigmoid + BCE)
model.add(Dense(5, activation='sigmoid'))   # 5个可能标签
model.compile(loss='binary_crossentropy')

4. 标签格式示例

(1) 多类别(One-hot编码)

y_true = [0, 2, 1]  # 原始标签(3个样本)
y_one_hot = [[1, 0, 0],  # 类别0[0, 0, 1],  # 类别2[0, 1, 0]   # 类别1
]

(2) 多标签(二进制向量)

y_multilabel = [[1, 0, 1],  # 同时属于类别0和2[0, 1, 1],  # 类别1和2[1, 1, 0]   # 类别0和1
]

5. 评估指标差异

指标多类别分类多标签分类
准确率(Accuracy)严格匹配(预测类别 = 真实类别)子集准确率(所有标签完全匹配)
F1分数宏平均/微平均F1(按类别计算)样本级平均F1(每个样本的标签组合计算)
Hamming Loss不适用错误预测的标签比例(越小越好)

多标签评估示例

from sklearn.metrics import hamming_loss
y_true = [[1, 0, 1], [0, 1, 1]]
y_pred = [[1, 1, 0], [0, 0, 1]]
print(hamming_loss(y_true, y_pred))  # 输出 0.5(50%标签错误)

6. 解决多标签问题的技术

(1) 问题转换方法

  • 二元关联(Binary Relevance):为每个标签训练独立的二分类器。
  • 标签组合(Label Powerset):将多标签组合为单类别(可能类别爆炸)。

(2) 专用算法

  • Classifier Chains:标签间建立依赖关系(序列预测)。
  • 神经网络输出层:直接使用Sigmoid激活 + 二元交叉熵。

(3) 深度学习模型

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Densemodel = Sequential([Dense(64, activation='relu', input_shape=(100,)),Dense(10, activation='sigmoid')  # 10个可能标签
])
model.compile(loss='binary_crossentropy', optimizer='adam')

7. 总结

  • 多类别分类

    • 核心:互斥类别,Softmax输出。
    • 适用:必须单选的任务(如数字识别)。
  • 多标签分类

    • 核心:非互斥标签,Sigmoid输出。
    • 适用:多属性共存的任务(如图像标注)。

关键记忆点

  • 多类别用Softmax,多标签用Sigmoid。
  • 多标签的评估更复杂(需关注部分匹配或Hamming Loss)。
  • 两者可互相转换(如将多标签拆分为多个二分类问题)。
http://www.dtcms.com/a/268889.html

相关文章:

  • 2. 你可以说一下 http 版本的发展过程吗
  • 【PTA数据结构 | C语言版】计算1~n与1~m每一项相互乘积的和
  • ArcGIS 水文分析升级:基于深度学习的流域洪水演进过程模拟
  • windows安装python环境以及对应编辑器的详细流程
  • 告别数据不一致!Spring Boot+Canal+RocketMQ实现精准的MySQL变更监听
  • 【flutter 在最新版本中已经弃用了传统的 apply from 方式引入 Gradle 插件】
  • 源哈希(sh)解析
  • 如果让计算机理解人类语言- One-hot 编码(One-hot Encoding,1950s)
  • Charles 中文版抓包工具详解:加速 API 调试与网络问题排查
  • tensorflow武林志第三卷第一章:天罗剑网
  • 【Java】switch,case,default,break用法
  • 在线学堂-4.媒资管理模块(三)
  • 技术面试题,HR面试题
  • LastActivityView -查看电脑上的所有操作记录
  • 基于MATLAB的图片和视频时间戳识别与可视化系统
  • 国际数字影像产业园:一站式服务,加速企业成长
  • 国产DSP,QXS320F280049,QXS320F28377D,QXS320F2800137,QXS320F28034
  • unity luban接入
  • Kotlin流操作符简介
  • uniapp三步完成生成一维码图片
  • 在linux 上使用tcpdump监听http 端口的报文并分析
  • 部署NextCloud AIO + Frp + nginx-proxy-manager内网穿透私有云服务
  • [免费]基于Python豆瓣电影数据分析及可视化系统(Flask+echarts+pandas)【论文+源码+SQL脚本】
  • WebView安全实现(一)
  • 「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程
  • Linux系统从入门到精通!第四天(shell编程和Docker)
  • 雪豹速清:智能清理,释放手机空间
  • 操作系统级TCP性能优化:高并发场景下的内核参数调优实践
  • 【机器学习笔记 Ⅲ】4 特征选择
  • WebDAV与内网穿透的协同创新:Joplin私有云同步架构深度解析