想象你是一位旅行博主,每次出门都会拍几百张照片。回家后,你坐在电脑前,准备把照片整理进相册。你建了几个文件夹:“美食”、“海滩”、“城市夜景”、“街头艺人”。问题来了——一张在海边小吃摊拍的照片,里面既有美食又有海滩,你该把它放进哪个文件夹?放“美食”丢了“海滩”,放“海滩”丢了“美食”。照片明明同时包含两类内容啊! 如果有一个聪明的助手,它能一眼看穿照片里的所有内容,帮你把这张照片同时放进“美食”和“海滩”两个文件夹——这就是多标签分类要解决的问题。它不是二选一,而是“全都要”。 在 AI 世界里,多标签分类无处不在:一张图片可以同时标注“日落”和“大海”,一篇新闻可以同时属于“科技”和“财经”,一首歌可以同时打上“摇滚”和“怀旧”标签。这篇文章将带你认识两种最基础的多标签方法:Binary Relevance(二进制相关性)和 Classifier Chains(分类器链),以及如何用多标签 F1 和 Hamming Loss 来评估模型好坏。学完后,你会明白多标签与多分类的本质区别,并能动手处理“一个样本对应多个标签”的真实问题。

岗位关联

多标签分类是图像标注、文本打标、推荐系统等场景的基石,掌握它意味着你能让模型“看懂”现实世界中海量的一图多义、一文多题的信息,是 AI 从业者必备的进阶技能。

目录
  1. 可视化演示
  2. 多标签分类基础
  3. 多热编码表示
  4. Binary Relevance
  5. Classifier Chains
  6. 多标签评估指标
  7. 应用与实战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示多标签分类的Binary Relevance独立分解、Classifier Chains链式相关性建模,以及F1与Hamming Loss评估指标计算,通过交互切换理解一个样本多标签的分类机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Binary Relevance:标签独立分解为L个二分类 独立分解:将多标签问题分解为L个独立二分类器,每个标签一个 并行训练:各分类器互不依赖,可并行训练,训练效率高 局限:忽略标签间相关性,如"猫"和"宠物"经常共现但BR无法利用 BR: hi(x) → {0,1}, i=1..L (独立) BR简单高效但忽略标签关联是核心局限

多标签分类基础

想象阿哲的相册新增了一个大项目:他要把旅行照片分门别类地放进电子相册的“精选集”里。他建了三个精选集——“美食”、“海滩”、“夜景”。但他很快发现一个烦恼:在巴厘岛拍的晚餐照片,既能进“美食”,又能进“海滩”。传统相册软件每次只能把照片放进一个文件夹,这让阿哲非常头疼。他心想:“为什么照片不能同时属于多个精选集呢?”

这个痛点,正是 AI 领域中多标签分类(Multi-label Classification)要解决的问题。在经典的单标签分类任务里,每张照片只能对应一个类别——就像你只能把照片放进一个文件夹。而在多标签分类中,一个样本(照片)可以同时拥有多个标签(精选集),标签之间互不排斥。与之相对,多分类(如手写数字 0-9)则是“互相排斥”的类别集合,一张图片里的数字只能是一种。

多标签分类在生活中极为常见:一幅摄影作品可能同时标注“日落”、“大海”、“剪影”;一篇新闻可能同时属于“科技”与“财经”;一首歌曲可能同时是“摇滚”和“怀旧”。这些都是“一个对象,多个标签”的典型场景。理解多标签分类,首先要转变思维:从“只能选一个”到“可以全都要”。

多热编码表示

阿哲想了个办法:他为每个精选集准备一张“打勾表”。每张照片对应一行,三个精选集对应三列。如果照片属于“美食”,就在“美食”那列打个勾(1),否则留空(0)。这样一来,一张照片就可能出现“美食 1、海滩 1、夜景 0”的记录。这张“打勾表”在机器学习里被称为多热编码(Multi-hot Encoding)。

你可能听说过独热编码(One-hot Encoding):在单标签多分类中,类别向量只有一个位置是 1,因为一个样本只能属于一个类别。例如一张“猫”的图片,类别向量就是 [1,0,0]。但在多标签场景中,这种表示就失效了——我们无法用独热编码表达“既是猫又是狗”的图片。于是,多热编码登场:标签向量的长度等于所有类别的总数,每个位置独立地取 0 或 1,表示“这个样本是否属于该标签”。例如有“猫、狗、鸟”三个候选标签,某图片同时包含猫和鸟,它的标签向量就是 [1,0,1]。

在代码实现中,MultiLabelBinarizer 是 sklearn 中将多标签集合(如 [{'猫'}, {'猫','鸟'}])转换为多热矩阵的常用工具。转换后的标签矩阵呈 (样本数, 标签总数) 的形状,每一行就是一个多热向量,供后续模型训练使用。

数学上,对于一个有 \(L\) 个候选标签的分类任务,第 \(i\) 个样本的标签向量 \(\mathbf{y}^{(i)}\) 定义如下:

回到阿哲的“打勾表”:每一行的数字串,就是多热向量。它不偏不倚地记录了一张照片的“多重身份”。多热编码,是后面所有算法和数据操作的基础字母表。

y(i)=[y1(i),y2(i),…,yL(i)],yj(i)∈{0,1}\mathbf{y}^{(i)} = [y^{(i)}_1, y^{(i)}_2, \ldots, y^{(i)}_L], \quad y^{(i)}_j \in \{0, 1\}
这个公式说明:每个样本用一个长度等于标签总数的 0/1 向量表示,向量的每一位对应一个标签是否存在。
  1. 标签向量定义\(\mathbf{y}^{(i)}\) 表示第 \(i\) 个样本的标签向量,它是一个长度为 \(L\) 的行向量。
    y(i)=[y1(i),y2(i),…,yL(i)]\mathbf{y}^{(i)} = [y^{(i)}_1, y^{(i)}_2, \ldots, y^{(i)}_L]
  2. 取值范围向量中的每个元素 \(y^{(i)}_j\) 只能取 0 或 1,1 表示该样本属于第 \(j\) 个标签,0 表示不属于。
    yj(i)∈{0,1}y^{(i)}_j \in \{0, 1\}
  3. 向量的多热特性与独热编码(只有一个 1)不同,多热向量允许同时出现多个 1,这正是“一张照片可同时属于多个精选集”的数学表达。
    ∑j=1Lyj(i)≥1(通常情况)\sum_{j=1}^{L} y^{(i)}_j \geq 1 \quad (\text{通常情况})

Binary Relevance

阿哲灵机一动:既然每个精选集都是独立的判断,那我何不请三个小助手?一个只负责判断“有没有美食”,一个只负责判断“是不是海滩”,一个只负责判断“是不是夜景”。三个助手各看一眼照片,互不商量,各自说出“有/没有”。最后把三个答案凑在一起,就是这张照片的标签集合。这就是 Binary Relevance(二元相关) 的核心思想——把多标签问题拆成若干个相互独立的二分类问题。

在训练阶段,Binary Relevance(简称 BR)为每个标签 \(j\) 单独训练一个二分类器 \(h_j\),每个分类器只使用该标签的 0/1 标签作为学习目标。预测时,给定一个新样本,依次让每个分类器判断,再将结果拼接成多热向量。形式化地,BR 模型的预测函数如下:

其中 \(h_j(\mathbf{x})\) 是第 \(j\) 个标签的二分类器输出(0 或 1)。

BR 的实现非常简单,像是把一个大问题切成小黄瓜片,每一片单独炒,最后拼成一盘菜。但它的局限也正如你猜到的——三个助手互不交流,会漏掉“标签之间的关联”。比如“海滩”的照片通常更容易同时是“美食”照片(因为海边小吃摊多),BR 却完全不在意这点。这也是它被后续方法升级的动机所在。

y^=[h1(x),h2(x),…,hL(x)]\hat{\mathbf{y}} = [h_1(\mathbf{x}), h_2(\mathbf{x}), \ldots, h_L(\mathbf{x})]
这个公式表明:预测结果就是 L 个独立二分类器的输出拼接向量,每个分类器只关注一个标签。
  1. 二分类器集合训练时,对每个标签各训练一个独立的二分类器 \(h_j\),一共有 \(L\) 个。
    h1(h1),h2(x),…,hL(x)h_1(h_1), h_2(x), \ldots, h_L(x)
  2. 标签独立预测每个分类器 \(h_j(\mathbf{x})\) 接收同一个特征向量 \(\mathbf{x}\),输出第 \(j\) 个标签的预测值。
    hj(x)∈{0,1}h_j(\mathbf{x}) \in \{0, 1\}
  3. 结果拼接所有分类器的输出按标签顺序拼接成最终的多标签预测向量 \(\hat{\mathbf{y}}\)。
    y^=[h1(x),h2(x),…,hL(x)]\hat{\mathbf{y}} = [h_1(\mathbf{x}), h_2(\mathbf{x}), \ldots, h_L(\mathbf{x})]

Classifier Chains

阿哲发现 BR 有一个笨拙之处:三个助手各看各的,明明“海滩”和“美食”经常一起出现,他们却不懂得互相参考。于是他想了一个新主意:让三个助手排成一队!第一个助手判断“有没有美食”,他判断完把结果悄悄告诉第二个助手;第二个助手结合“有无美食”这个线索,再判断“是不是海滩”;第三个助手再参考前面两位的答案,判断“是不是夜景”。后面的助手,站在前面助手的肩膀上做判断。

这就是 Classifier Chains(分类器链) ——一个捕捉标签相关性的链式方法。与 BR 的“互不打扰”不同,Classifier Chains 把标签当作一个顺序链条:训练时,第 \(j\) 个分类器的输入除了原始特征 \(\mathbf{x}\),还额外拼接上前 \(j-1\) 个标签的真实值;预测时,则拼接前 \(j-1\) 个标签的预测值。这样,每个分类器都能利用之前标签的判别信息,将标签相关性注入整个模型。

Classifier Chains 的本质,是把“标签之间互相提示”的常识编入算法流程。就像阿哲的助手们学会了“看见前一个人说‘有美食’,自己会更倾向于说‘这是海滩夜市’”。当然,链的顺序会对性能有影响——如果顺序安排得巧妙,模型能学到更贴合的关联;如果顺序不佳,误差也会像滚雪球一样沿链传播。这正是它的“阿喀琉斯之踵”。

y^1=h1(x),y^j=hj(x,y^1,y^2,…,y^j−1)(j=2,3,…,L)\hat{y}_1 = h_1(\mathbf{x}), \quad \hat{y}_j = h_j(\mathbf{x}, \hat{y}_1, \hat{y}_2, \ldots, \hat{y}_{j-1}) \quad (j=2,3,\ldots,L)
这个公式展示了一条决策链:第一个标签只由原始特征决定,从第二个标签开始,每个预测都会把前面的预测结果当成额外输入。
  1. 首个分类器第一个分类器 \(h_1\) 只接收原始特征 \(\mathbf{x}\),输出第一个标签的预测值。
    y^1=h1(x)\hat{y}_1 = h_1(\mathbf{x})
  2. 链式条件输入对于第 \(j\) 个分类器,输入由原始特征 \(\mathbf{x}\) 与前 \(j-1\) 个预测值拼接而成。
    y^j=hj(x,y^1,…,y^j−1)\hat{y}_j = h_j(\mathbf{x}, \hat{y}_1, \ldots, \hat{y}_{j-1})
  3. 信息逐级传递标签预测信息像接力棒一样沿链传递,使得后面的分类器拥有更丰富的上下文。
    y^1→y^2→⋯→y^L\hat{y}_1 \rightarrow \hat{y}_2 \rightarrow \cdots \rightarrow \hat{y}_L

多标签评估指标

阿哲的相册整理得越来越顺利,但他怎么知道“整理得好不好”呢?他需要一个打分方式。在单标签分类中,准确率(Accuracy)很直观:猜对了多少样本。但在多标签中,一个样本的预测是“部分正确”的——比如照片真实标签是“美食、海滩”,模型只预测出“美食”,这算对了一半。因此需要更细腻的度量,包含精确率、召回率、多标签 F1 和 Hamming Loss。

精确率(Precision)衡量你预测的标签中有多少是“真命中”;召回率(Recall)衡量真实标签中有多少被你“找回来了”。两者都高,才算真本事。多标签 F1 是两者的调和平均,常用的有两种:宏平均(micro)和微平均(macro)。微平均把所有样本、所有标签的预测结果汇总成一个“大混淆矩阵”再算 F1,而对样本量少的标签更敏感的宏平均则先按标签分别算 F1 再取平均。

Hamming Loss(海明损失) 则更直接:统计所有标签中,预测值与真实值不一致的比例。Hamming Loss 越低越好,0 表示完美预测。它不像准确率那样只看“整个样本猜没猜对”,而是把每一个标签位当作一次“判断题”,精确地衡量模型的标签级错误率。

对于包含 \(N\) 个样本、\(L\) 个标签的多标签任务,Hamming Loss 的定义如下:

除了 Hamming Loss,多标签 F1 也更加公平地反映了模型的综合能力。F1 的“调和平均”特性让它对精确率和召回率中的短板非常敏感——就像一个偏科学生的总评,任何一科太差都会拉低整体评价。在评估多标签模型时,建议同时报告 Hamming Loss 和 F1,让模型的“贴标签功底”和“全局判断能力”都接受检验。

Hamming Loss=1N∑i=1N1L∑j=1L1[y^j(i)≠yj(i)]\text{Hamming Loss} = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{L} \sum_{j=1}^{L} \mathbb{1}\left[ \hat{y}^{(i)}_j \ne y^{(i)}_j \right]
这个公式表示:对每个样本的每个标签位,只要预测值与真实值不一致就记一次错误,最后求所有标签位上的平均错误比例。值越小,说明模型对“每个标签的取舍”越准确。
  1. 单个标签位判断对第 \(i\) 个样本的第 \(j\) 个标签,比较预测值 \(\hat{y}^{(i)}_j\) 与真实值 \(y^{(i)}_j\) 是否相等,不相等则指示函数取 1。
    1[y^j(i)≠yj(i)]\mathbb{1}\left[ \hat{y}^{(i)}_j \ne y^{(i)}_j \right]
  2. 单样本内平均把一个样本的所有标签位错误数相加,除以标签总数 \(L\),得到该样本的标签错误比例。
    1L∑j=1L1[y^j(i)≠yj(i)]\frac{1}{L} \sum_{j=1}^{L} \mathbb{1}\left[ \hat{y}^{(i)}_j \ne y^{(i)}_j \right]
  3. 全体样本平均把所有样本的标签错误比例相加,再除以样本数 \(N\),得到整个数据集上的平均海明损失。
    1N∑i=1N1L∑j=1L1[y^j(i)≠yj(i)]\frac{1}{N} \sum_{i=1}^{N} \frac{1}{L} \sum_{j=1}^{L} \mathbb{1}\left[ \hat{y}^{(i)}_j \ne y^{(i)}_j \right]

应用与实战

阿哲的多标签整理法越用越顺手,他干脆把它写成了一个 AI 小工具“旅行相册自动归档器”。这个工具每次导入一张照片,能自动打上“美食”“海滩”“夜景”等多个标签,然后同时放入对应的精选集。他再也不用手工整理几千张照片了——这正是多标签分类在现实世界中的缩影。

在图像标注中,多标签分类被广泛应用于自动给图片打标签:社交平台识别照片中的人、物体、场景,一次性标注多个标签;在文本分类中,一篇新闻报道可能同时被标记为“科技”和“商业”,一封邮件可能同时属于“工作”和“紧急”,多标签模型让内容管理系统更加智能;在推荐系统中,平台可根据用户历史兴趣生成多标签画像,然后精准推荐符合多个标签的内容。这些应用的背后,都离不开多标签分类算法。

在 Python 生态中,scikit-learn 提供了开箱即用的工具:MultiOutputClassifier 可将任意二分类器包装成 Binary Relevance 模式;ClassifierChain 则直接实现了分类器链的自动封装。此外,sklearn.metrics 中提供了 hamming_loss、f1_score(支持 average='micro'/'macro'/'samples')等评估函数。有了这些工具,从“图像多标签标注”到“文本多主题分类”,开发者可以快速搭建基线模型并评估效果。多标签分类就像阿哲的“自动归档器”——一次判断,多重归档,让信息尽其所能地被找到。

AI 应用场景

场景一:社交平台图片自动标签

阶段:模型设计(多标签分类架构选择)

解决的问题:传统图片标注系统依赖人工为每张图片选择唯一分类,但一张聚会合照往往同时包含“多人”“室内”“美食”“庆祝”等多个要素,人工标注费时费力且易漏标。采用多标签分类后,系统可自动将图片同时归入多个标签,大幅提升标注效率与召回效果。

具体案例:某相册 APP 用 Binary Relevance + 图像特征提取器(如 CNN 特征)搭建自动标签管线。每一张照片被提取为特征向量后,分别经过“是否有美食”“是否有人物”“是否是夜景”等多个独立二分类器,输出多热向量。经过人工抽检,标签召回率提升了 40%,用户搜索“美食+夜景”能同时找到相关图片。

场景二:新闻文本多主题分类

阶段:特征工程 + 模型训练(Classifier Chains)

解决的问题:新闻网站编辑需要为每篇稿件选择主次栏目,但一篇“AI芯片产业报告”既涉及“科技”又涉及“财经”,传统单标签分类只能二选一,导致推荐系统信息损耗。使用 Classifier Chains 建模标签相关性,可让模型自动捕捉“科技→财经”的联动规律。

具体案例:某资讯平台用 TF-IDF + ClassifierChain(基学习器为逻辑回归)为新闻打标。由于链式中利用了“科技=1”来帮助判断“财经”,相比 Binary Relevance,精确率提升了约 12%,且自动判断标签主次顺序,让首页推荐同时命中两类兴趣用户。

Python 演示

python49 行
import numpy as npfrom sklearn.datasets import make_multilabel_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.multioutput import MultiOutputClassifierfrom sklearn.multioutput import ClassifierChainfrom sklearn.metrics import hamming_loss, f1_score # 生成多标签模拟数据:20个特征,5个候选标签,每样本平均3个标签X, Y = make_multilabel_classification(    n_samples=300, n_features=20,    n_classes=5, n_labels=3,    random_state=42) X_train, X_test, Y_train, Y_test = train_test_split(    X, Y, test_size=0.3, random_state=42) # 方法1: Binary Relevance(用MultiOutputClassifier包装)br_model = MultiOutputClassifier(LogisticRegression(max_iter=1000))br_model.fit(X_train, Y_train)Y_pred_br = br_model.predict(X_test) # 方法2: Classifier Chainschain_model = ClassifierChain(LogisticRegression(max_iter=1000), order="random", random_state=42)chain_model.fit(X_train, Y_train)Y_pred_chain = chain_model.predict(X_test) # 评估函数def evaluate_model(name, y_true, y_pred):    hl = hamming_loss(y_true, y_pred)    f1_micro = f1_score(y_true, y_pred, average="micro")    f1_macro = f1_score(y_true, y_pred, average="macro")    print(f"--- {name} ---")    print(f"Hamming Loss: {hl:.4f}")    print(f"F1-micro: {f1_micro:.4f}")    print(f"F1-macro: {f1_macro:.4f}") evaluate_model("Binary Relevance", Y_test, Y_pred_br)evaluate_model("Classifier Chains", Y_test, Y_pred_chain) # 展示一个样本的预测,方便理解多标签print("\n示例样本真实标签(多热向量):")print(Y_test[0])print("Binary Relevance 预测标签:")print(Y_pred_br[0])print("Classifier Chains 预测标签:")print(Y_pred_chain[0])
目的:用 sklearn 生成一个多标签模拟数据集,分别实现 Binary Relevance 和 Classifier Chains 两种算法,并对比它们在 Hamming Loss 与多标签 F1 上的表现,直观感受两种方案的差异。
  1. X, Y = make_multilabel_classification(...)生成模拟多标签数据,X 是特征矩阵,Y 是多热标签矩阵。
  2. MultiOutputClassifier(LogisticRegression(...))sklearn 内置的 Binary Relevance 包装器,对每个标签单独训练一个逻辑回归。
  3. ClassifierChain(LogisticRegression(...), order="random")直接构造分类器链,order 控制链中标签的处理顺序。
  4. br_model.fit(X_train, Y_train)训练 BR 模型,内部自动为 5 个标签各维护一个二分类器。
  5. chain_model.fit(X_train, Y_train)训练链式模型,后面的分类器会把前面的预测作为额外特征输入。
  6. hamming_loss(y_true, y_pred)计算海明损失,值越低说明标签级别的预测越准确。
  7. f1_score(..., average="micro")微平均 F1,将所有标签预测统一汇总后计算 F1。
  8. f1_score(..., average="macro")宏平均 F1,先按标签分别算 F1 再取平均,对稀有标签更敏感。
  9. Y_pred_br[0]打印第一个测试样本的 BR 预测多热向量,可直观看到多个标签同时被输出。

常见误区

误区多个标签就是多个类别嘛,多标签分类和多分类本质上是一回事,就是类别多了一点而已。

正解两者有本质区别。多分类(如手写数字 0-9)的类别是互斥的,一个样本只能属于一个类别,所以标签用独热编码(只有一个 1)。多标签分类允许一个样本同时拥有多个标签,标签间存在共存关系,标签向量是多热形式(可能有多个 1)。好比“甜/咸/辣”的口味选择和“川菜/粤菜/日料”的菜系选择——前者是单选,后者可以同时是多选。

为何常见:初学者常把“多个类别”和“多个标签”混为一谈,忽略了互斥性(Mutual Exclusivity)才是区分二者的关键。

误区既然 BR 把每个标签拆开各自训练,那它在深层模型里应该也能学到标签之间的关联吧?

正解BR 的核心假设是标签相互独立,它在训练过程中完全不会接受“其他标签”的信息。每个分类器只看原始特征,不看其他标签的输出。因此,无论底层模型多复杂,BR 本身都无法建模标签相关性。如果你想利用“有海滩就可能有美食”这类关联,应该使用 Classifier Chains 或标签嵌入(Label Embedding)等方案。

为何常见:人们容易从“模型很复杂”推断“它能学到任何关系”,忽略了方法本身对输入信息的限制——BR 的每个分类器根本没有“看见”其他标签的机会。

误区Hamming Loss 是 0 就代表模型完美了,模型好不好只看这个指标就行。

正解Hamming Loss 衡量的是标签位的平均错误比例,它聚焦于“标签级”准确度。但在很多业务中,我们更关心“标签组合是否命中了用户需求”。一个模型 Hamming Loss 很低,却可能总漏掉冷门但重要的标签;此时多标签 F1(尤其宏平均 F1)能更全面地反映每个标签的均衡表现。代码中应该两者结合使用:Hamming Loss 反映全局标签错误率,F1 反映预测的综合命中率。

为何常见:习惯于用“一个数”评价模型,忽略了不同指标从不同视角刻画模型行为,冷门标签很容易拉低整体满意度。

误区分类器链就是排个队,谁先谁后不都一样吗?反正最后输出都一样。

正解链的顺序对性能有明显影响。排在前面的标签会传导信息给后面的分类器,如果前面的标签预测误差较大,错误会沿链传播并放大(错误传播现象)。实践中可以采用启发式策略(如优先排列更易预测的标签)或随机多链集成(Ensemble of Classifier Chains)来缓解顺序带来的偏差。

为何常见:直观上“排队先后”看似不影响集合结果,但基于条件依赖的链式建模,顺序就是模型“先相信谁”的先验知识,顺序不同导致假设空间不同。

面试题

Q1. 以下哪个场景最适合用多标签分类?

单选题 · easy

  • A.识别手写数字 0-9
  • B.判断一封邮件是否为垃圾邮件
  • C.给一张照片同时打上“美食”“海滩”标签← 正确答案
  • D.将新闻分为体育、娱乐、科技三类

答案:C。多标签分类的核心是“一个样本可同时属于多个类别”。选项 C 中照片可以同时有“美食”和“海滩”标签,属于典型多标签场景。A(数字)、B(垃圾邮件)、D(新闻三选一)中类别互斥或只有二选一,都是单标签分类。

Q2. 多热编码与独热编码的区别在于什么?

单选题 · easy

  • A.多热编码只能有一个 1
  • B.独热编码允许有多个 1
  • C.多热编码允许多个位置同时为 1← 正确答案
  • D.两者没有区别

答案:C。独热编码是“只允许一个 1”的向量,用于互斥的类别;多热编码允许多个位置同时为 1,用于表达一个样本同时拥有多个标签。C 描述了多热编码的核心特征,其余选项描述有误。

Q3. Binary Relevance 方法的核心假设是什么?

单选题 · mid

  • A.标签之间相互关联
  • B.每个标签可以被独立预测← 正确答案
  • C.样本之间相互依赖
  • D.标签数量必须为偶数

答案:B。Binary Relevance 将多标签问题拆解为多个独立的二分类问题,每个分类器只关注一个标签,不管其他标签的输出。它的核心假设就是“标签之间相互独立”,因此 B 正确。A 正是 BR 的缺点而非假设,C 与问题无关,D 显然错误。

Q4. 关于 Classifier Chains,下列说法正确的是?

单选题 · mid

  • A.各分类器彼此互不干扰
  • B.链顺序对模型性能没有影响
  • C.后面的分类器可以使用前面标签的预测信息← 正确答案
  • D.它无法建模标签相关性

答案:C。Classifier Chains 通过链式结构使第 j 个分类器接收前 j-1 个标签的预测值作为额外输入,从而建模标签相关性,因此 C 正确。A 描述的是 Binary Relevance;B 错误,顺序会影响误差传播;D 与分类器链的设计初衷相悖。

Q5. 某多标签模型在测试集上的 Hamming Loss 为 0.2,标签总数为 5。这个数值说明什么?

单选题 · mid

  • A.模型在 20% 的样本上完全预测错误
  • B.模型在全部预测的标签位中,有 20% 的位预测错误← 正确答案
  • C.模型精确率为 80%
  • D.模型在 80% 的样本上完全预测正确

答案:B。Hamming Loss 是“所有样本所有标签位上预测错误的比例”,0.2 表示每 100 个标签位判断中约有 20 个错误,和“样本级完全正确率”没有直接关系,因此 B 对。A、D 混淆了标签位与样本,C 说法不完整,因为精确率只是 F1 的一个组成部分。

Q6. 以下哪些属于多标签分类的评估指标?

多选题 · mid

  • A.Hamming Loss← 正确答案
  • B.宏平均 F1← 正确答案
  • C.精确率与召回率← 正确答案
  • D.均方误差

答案:ABC。Hamming Loss 是标签级错误率指标,宏平均 F1 是先按标签算 F1 再取平均的综合指标,精确率与召回率是评估多标签预测质量的基础指标,因此 A、B、C 都对。D 均方误差是回归任务常用指标,与多标签分类无关。

Q7. 当类别之间存在明显相关性(如“海滩”常与“日落”同时出现)时,以下哪种方法最有可能取得更好的效果?

单选题 · hard

  • A.Binary Relevance
  • B.Classifier Chains← 正确答案
  • C.随机预测
  • D.独热编码

答案:B。Classifier Chains 将前序标签预测值传递到后续分类器,能有效利用“海滩→日落”这类标签相关性,因此 B 正确。Binary Relevance 按独立假设建模,无法捕捉关联;随机预测无意义;独热编码用于互斥标签,不适用于多标签场景。

Q8. 关于宏平均 F1 与微平均 F1,下列说法正确的有哪些?

多选题 · hard

  • A.微平均 F1 将所有标签预测汇总后统一计算← 正确答案
  • B.宏平均 F1 对稀有标签变化更敏感← 正确答案
  • C.宏平均 F1 先按标签分别计算再取平均← 正确答案
  • D.两者在数值上总是相同

答案:ABC。微平均 F1 将所有样本所有标签的预测汇总成全局混淆矩阵后计算(A 对);宏平均 F1 先对每个标签单独计算 F1,再取算术平均(C 对),因此每个标签(包括稀有标签)都被平等对待,对稀有标签变化更敏感(B 对)。D 错误,当标签分布极不均时两者数值差异很大。

Q9. 多标签分类与多分类的本质区别是什么?

单选题 · easy

  • A.多标签分类类别更多
  • B.多标签分类标签间不互斥,一个样本可有多个标签← 正确答案
  • C.多分类不能使用独热编码
  • D.多标签分类不需要特征工程

答案:B。多分类的类别互斥,每个样本只能归属一个类别;多标签分类的标签不互斥,一个样本可以同时拥有多个标签(如一张图既是日落又是海滩)。B 正确描述了本质区别。A 只是表象,C 完全说反了,D 与特征工程无关。

Q10. 关于 Classifier Chains 的错误传播问题,以下哪些缓解策略是合理的?

多选题 · extreme

  • A.使用随机顺序训练多个链并集成← 正确答案
  • B.优先将高置信度标签排在链前← 正确答案
  • C.完全消除链中错误(误差不可能传播)
  • D.用真实标签作为中间输入训练链模型

答案:AB。错误传播是链式模型的固有风险。随机多链集成可降低顺序依赖(A 对);优先排列高置信度标签可减少早期误差(B 对)。C 说“完全消除”不现实;D 在训练时使用真实标签作为中间输入是标准做法,但并非专门为缓解错误传播而设计的“推理策略”,且推理时仍使用预测标签,因此不选。