理解多标签分类

2025年8月13日 | 阅读 8 分钟

多标签分类是一种预测建模任务,其中实例可以与零个、一个或多个标签相关联。多标签问题也称为非互斥问题,其中答案和输入可以包含非互斥标签,即单个输入可以附加多个标签,这与传统的分类程序不同。

多标签分类得到了深度学习模型的自然支持,特别是神经网络。神经网络可以利用 Keras 等库,以简单的方法进行构建、训练和测试,以解决这类问题。

在本指南中,您将学习

  • 多标签分类的术语是什么,以及它与常规分类有何共同之处。
  • 用于多标签分类的神经网络配置。
  • 如何处理这类模型,以及如何在未知的新数据上进行预测。

多标签分类如何工作?

监督机器学习通常可应用于许多领域的內容分类,例如,积极或消极的餐厅评论,或者图像是否包含猫或狗。这个问题通常分为三类:二元分类、多类分类和多标签分类。在本文中,我们将定义这三者并解释它们的区别,同时举例说明多标签分类的实际应用以证明其有用性。

分类类型的主要区别

二元分类

当我们只有两个可能出现的类,并且一个数据项被认为只属于其中一个类时,这种情况就是二元分类,例如,将产品评论分类为积极或消极。

多类分类

应用于三种或三种以上假设类的情况,但一个特定的数据项必须属于单个类别。例如,确定图像中交通信号灯的主要颜色是红色、黄色还是绿色。

多标签分类

在这种情况下,存在两个或多个类,并且每个数据点可以属于任何一个类/或不属于任何类。实际应用是检测图像中可能存在的所有交通标志的任务,一个图像中可能同时存在多个标志。

多标签分类

分类是预测建模的一个领域,其目标是将输入分配到一个输出或类标签。与回归任务(我们可能对预测连续数值感兴趣)不同,分类侧重于离散标签。

大多数分类问题有两个常见类别

  • 回归(单个标签的分类,无论是二元还是多类),其中类标签是互斥的,因为任何输入只能属于其中一个类。
  • 基于单个或多个类的概率,同样假设类是互斥的。

然而,在某些任务中,一个输入可以使用多个标签。在这种情况下,标签不是互斥的,并且一个输入可以不属于任何这些类,或者属于一个或多个这些类。这类问题被识别为多标签分类问题。

多标签分类的相关问题?

  • 输入样本可以被标记,也可以没有任何标签。
  • 所有相关的标签都在预测过程中输出。
  • 分类是基于输入特征的。

创建合成多标签数据集

Scikit-learn 提供了 `make_multilabel_classification()` 方法来创建用于多标签分类问题的合成数据集,因此可以用于测试和实验。

这是一个创建可用于多标签分类的模拟数据的示例。输入数据有 1000 个样本和 10 个特征。它包含三个输出类,平均而言,每个样本被分配了其中的两个。

输出

(1000, 10) (1000, 3)
[ 3.  3.  6.  7.  8.  2. 11. 11.  1.  3.] [1 1 0]
[7. 6. 4. 4. 6. 8. 3. 4. 6. 4.] [0 0 0]
[ 5.  5. 13.  7.  6.  3.  6. 11.  4.  2.] [1 1 0]
[1. 1. 5. 5. 7. 3. 4. 6. 4. 4.] [1 1 1]
[ 4.  2.  3. 13.  7.  2.  4. 12.  1.  7.] [0 1 0]
[ 4.  3.  3.  2.  5.  2.  3.  7.  2. 10.] [0 0 0]
[ 3.  3.  3. 11.  6.  3.  4. 14.  1.  3.] [0 1 0]
[ 2.  1.  7.  8.  4.  5. 10.  4.  6.  6.] [1 1 1]
[ 5.  1.  9.  5.  3.  4. 11.  8.  1.  8.] [1 1 1]
[ 2. 11.  7.  6.  2.  2.  9. 11.  9.  3.] [1 1 1]

多标签神经网络

并非所有机器学习算法都仅限于处理多标签分类任务。一些机器学习算法(如神经网络)在多标签分类领域是最具适应性和最强大的。神经网络在处理多标签问题时可以取得出色的性能,具体取决于任务和数据复杂度,前提是配置得当。

将神经网络修改为执行多标签分类的秘诀在于根据任务中的标签数量设计输出层。例如,当可能存在三个标签时,输出层必须有三个节点,每个节点对应一个标签。

输出层中的每个节点都有一个 sigmoid 激活函数,它返回一个介于 0 和 1 之间的概率,表示该标签存在的几率。模型将使用二元交叉熵损失进行训练,该损失假定每个标签预测实际上是一个二元分类问题。

我们将使用 Keras 在上一步生成的合成数据集上创建一个简单的多层感知机 (MLP)。这些数据有 10 个预测变量和三个类。该模型在一个隐藏层中使用 20 个 ReLU 激活的隐藏单元,并使用 Adam 优化器来优化模型。

输出

Understanding Multilabel Classification

使用神经网络进行多标签分类

神经网络可以有效地进行多标签分类,尤其是在配置得当的情况下。对于较小的数据集,应使用重复的 k-fold 交叉验证来多次测试模型,因为训练过程是随机的,训练结果不总是一致的。该方法可以更可靠地估计模型在拆分训练测试上的性能。

多标签分类中使用的神经网络的输出层由每个标签的一个节点组成。所有这些节点都具有 sigmoid 激活函数,这意味着它们会输出一个介于 0 到 1 之间的概率,这就是给定标签存在的概率。

由于多个标签的每个预测都是独立的,因此使用二元交叉熵损失函数来训练网络,并且每个标签预测都被表示为一个单独的二元分类问题。这种配置使模型能够为每个输入样本表示多个非互斥标签。

示例:使用重复的 K-Fold 交叉验证评估 MLP

输出

>0.780
>0.820
>0.790
>0.810
>0.840
Accuracy: 0.812 (0.032)

示例:最终模型训练和预测

输出

Predicted: [0.9998627  0.9849341  0.00208042] 

多标签分类的问题

尽管多标签分类非常有用,但多标签分类存在各种挑战,这使得它比普通分类任务更复杂。

标签依赖性

多标签数据集中的标签通常是相关的。例如,当一张图片被标记为“海滩”时,它更有可能被标记为“海洋”而不是“雪”。传统模型通常遵循的假设是标签是独立的;因此,很难以良好的方式看到和学习标签之间的任何权衡关系。

数据不平衡

某些标签比其他标签出现的可能性更大。举个例子,可能 80% 的样本带有“猫”标签,而 2% 的样本带有“长颈鹿”标签,模型可能会变得有偏见,从而将其高频标签“猫”预测出来,而忽略“长颈鹿”。这种不平衡可能对整体模型性能和识别较少见的类的能力产生毁灭性的后果。

复杂的评估

与单个标签分类(其中准确性通常足够)不同,多标签模型不像这样简单地进行评估。每个样本可能有多个正确标签,需要专用的评估指标,如汉明损失、F1 分数(微/宏)或子集准确度来评估性能。这些度量还考虑了部分正确性和标签重叠,这增加了模型评估的复杂性。

结论

在本教程中,您已经能够构建专门用于处理多标签分类任务的深度学习模型。多标签分类与传统分类不同,它是预测输入类的零个或多个(非互斥)标签的问题,即每个输入可以同时属于多个类。

您还了解了如何通过使用每个标签一个输出节点并对其使用 sigmoid 激活,以及使用二元交叉熵损失进行训练来配置神经网络来处理这类任务。此外,本教程还解释了如何正确检查这些模型,并展示了如何预测新数据如何使用训练好的模型进行估算。