众所周知,二分类工作旨在将给定的输出分为 0 和 1 两类。而多标签分类(又称多方向分类)一次性地根据给定输出预计多个二分类方向。例如,模型可以预计给定的图片是一条狗还是一只猫,同时预计其毛皮是长还是短。
在多分类工作中,预计方向是互斥的,这意味着一个输出可以对应于多个分类。本文将介绍一些可能提升多标签分类模型性能的小技能。
模型评价函数
通过在「每一列」(分类标签)上计算模型评价函数并取得分均值,我们可以将大多数二分类评价函数用于多标签分类工作。对数损失或二分类交叉熵就是其中一种评价函数。为了更好地考虑到类别不均衡现象,我们可以应用 ROC-AUC 作为评价函数。
图 1:ROC-AUC 曲线
建模技能
在介绍构建特点的技能之前,本文将介绍一些设计适用于多标签分类场景的模型的小技能。
对于大多数非神经网络模型而言,我们唯一的选择是为每个方向训练一个分类器,然后将预计结果融合起来。为此,「scikit-learn」程序库提供了一个简单的封装类「OneVsRestClassifier」。尽管这个封装类可以使分类器能够执行多标签工作,但我们不应采用这种要领,其弊端如下:(1)我们会为每个方向训练一个新模型,因此训练时间相对较长。(2)模型无法学习不同标签之间的关系或标签的相关性。
第二个问题可以通过执行一个两阶段训练过程来解决。其中,我们将方向的预计结果和原始特点相结合,作为第二阶段训练的输出。这样做的缺点是,由于需要训练的模型数量是之前的两倍,训练时间将大幅度提升。神经网络(NN)则适用于这种场景,其中标签的数量即为网络中输出神经元的数量。我们可以直接将任意的二分类损失应用于神经网络模型,同时该模型会输出所有的方向。此时,我们只需要训练一个模型,且网络可以通过输出神经元学习不同标签的相关性,从而解决上文中提出的非神经网络模型的两个问题。
图 2:神经网络
有监视的特点选择要领
在开始特点工程或特点选择之前,需要对特点进行归一化和标准化处理。应用「scikit-learn」库中的「Quantile Transformer」将减小数据的偏度,使特点服从正态分布。此外,还可以通过对数据采取「减去均值,除以标准差」的操作,对特点进行标准化处理。该过程与「Quantile Transformer」完成了类似的工作,其目的都是对数据进行变换,使数据变得更加鲁棒。然而,「Quantile Transformer」的计算开销较高。
大多数算法都是为单一方向设计的,因此应用有监视特点选择要领稍微有些困难。为了解决这个问题,我们可以将多标签分类工作转化为多类分类问题。「Label Powerset」就是其中一种流行的解决方案,它将训练数据中的每一个独特的标签组合转化为一个类。「scikit-multilearn」程序库中包含实现该方案的工具。
图 3:Label Powerset 要领
在完成转换后,我们可以应用「信息增益」和「卡方」等要领来挑选特点。尽管这种要领是可行的,但是却很难处理上百甚至上千对不同的独特标签组合。此时,应用无监视特点选择要领可能更合适。
无监视特点选择要领
在无监视要领中,我们不需要考虑多标签工作的特性,这是因为无标签要领并不依赖于标签。典型的无监视特点选择要领包括:
主成分分析(PCA)或其它的因子分析要领。此类要领会去除掉特点中的冗余信息,并为模型抽取出有用的特点。请确保在应用 PCA 之前对数据进行标准化处理,从而使每个特点对分析的贡献相等。另一个应用 PCA 的技能是,我们可以将该算法简化后的数据作为模型可选择应用的额外信息与原始数据连接起来,而不是直接应用简化后的数据。
方差阈值。这是一种简单有效的降低特点维度的要领。我们丢弃具有低方差或离散型的特点。可以通过找到一个更好的选择阈值对此进行优化,0.5 是一个不错的初始阈值。
聚类。通过根据输出数据创建聚类簇来构建新特点,然后将相应的聚类分配给每一行输出数据,作为一列新的特点。
图 4:K – 均值聚类
上采样要领
当分类数据高度不均衡时,可以应用上采样要领为稀有类生成人造样本,从而让模型关注稀有类。为了在多标签场景下创建新样本,我们可以应用多标签合成少数类过采样技术(MLSMOTE)。
代码链接:https://github.com/niteshsukhwani/MLSMOTE
该要领由原始的 SMOTE 要领修改而来。在生成少数类的数据并分配少数标签后,我们还通过统计每个标签在相邻数据点中出现的次数来生成其它相关的标签,并保留出现频次高于一半统计的数据点的标签。
原文链接:https://andy-wang.medium.com/bags-of-tricks-for-multi-label-classification-dc54b87f79ec