这大概是最实用的多标签分类tip了。众所周知,二元分类任务旨在将给定的输入分为0和1两类。另一方面,多标签分类(也称为多目标分类)为给定的输入预测多个二元分类目标立刻。例如,模型可以预测给定图片是狗还是猫,以及它的皮毛是长的还是短的。在多分类任务中,预测目标是互斥的,即一个输入可以对应多个类别。本文将介绍一些可能会提高多标签分类模型性能的小技巧。模型评估函数我们可以将大多数二元评估函数用于多标签分类任务,方法是计算“每一列”(类标签)上的模型评估函数并取平均分。对数损失或二元交叉熵就是这样一种评估函数。为了更好地解释类不平衡,我们可以使用ROC-AUC作为评估函数。图1:ROC-AUC曲线建模技巧在介绍构建特征的技巧之前,本文将介绍一些设计适用于多标签分类场景的模型的技巧。对于大多数非神经网络模型,我们唯一的选择是为每个对象训练一个分类器,然后合并预测。为此,“scikit-learn”库提供了一个简单的包装类“OneVsRestClassifier”。虽然这个包装类可以使分类器执行多标签任务,但我们不应该采用这种方法,因为有以下缺点:(1)我们将为每个目标训练一个新模型,因此训练时间相对较长。(2)模型无法学习到不同标签之间的关系或标签之间的相关性。第二个问题可以通过实施两阶段训练过程来解决。其中,我们将目标的预测结果与原始特征结合起来作为第二阶段训练的输入。这样做的缺点是训练时间会急剧增加,因为需要训练两倍的模型。神经网络(NN)适用于这种场景,其中标签的数量是网络中输出神经元的数量。我们可以直接对神经网络模型应用任何二元分类损失,模型会同时输出所有目标。此时,我们只需要训练一个模型,网络就可以通过输出神经元学习不同标签的相关性,从而解决上面提出的非神经网络模型的两个问题。图2:神经网络的监督特征选择方法在开始特征工程或特征选择之前,需要对特征进行归一化和归一化。使用“scikit-learn”库中的“QuantileTransformer”将减少数据的偏度并使特征服从正态分布。此外,还可以通过对数据进行“减去均值除以标准差”的操作来对特征进行标准化。这个过程做了类似“QuantileTransformer”的工作,其目的是对数据进行变换,使数据更加健壮。但是,“QuantileTransformer”的计算开销很高。大多数算法都是为单一目标设计的,因此使用有监督的特征选择方法稍微困难一些。为了解决这个问题,我们可以将多标签分类任务转化为多类分类问题。“LabelPowerset”是一种流行的解决方案,它将训练数据中每个唯一的标签组合转换为一个类。“scikit-multilearn”库包含实现该方案的工具。图3:LabelPowerset方法转换后,我们可以使用“信息增益”和“卡方”等方法来选择特征。虽然这种方法可行,但很难处理数百甚至数千种不同的独特标签组合。在这一点上,使用无监督的特征选择方法可能更合适。无监督特征选择方法在无监督方法中,我们不需要考虑多标签任务的特性,因为无监督方法不依赖于标签。典型的无监督特征选择方法包括:主成分分析(PCA)或其他因子分析方法。这些方法去除特征中的冗余信息并提取对模型有用的特征。确保在使用PCA之前对数据进行归一化,以便每个特征对分析的贡献相同。使用PCA的另一个技巧是,我们可以将算法的缩减数据与原始数据连接起来,作为模型使用的可选额外信息,而不是直接使用缩减数据。方差阈值。这是一种简单有效的降维方法。我们丢弃具有低方差或离散化的特征。这可以通过找到更好的选择阈值来优化,0.5是一个很好的起始阈值。聚类。通过从输入数据创建簇的簇来构建新特征,然后将相应的簇分配给输入数据的每一行作为新的特征列。图4:K均值聚类的上采样方法当分类数据高度不平衡时,可以使用上采样方法为稀有类生成人工样本,从而使模型专注于稀有类。要在多标签场景中创建新样本,我们可以使用多标签合成少数类过采样技术(MLSMOTE)。代码链接:https://github.com/niteshsukhwani/MLSMOTE该方法由原来的SMOTE方法修改而来。在为少数类生成数据并分配少数标签后,我们还通过统计每个标签在相邻数据点中出现的次数来生成其他相关标签,并保留出现频率高于一半的数据点的标签统计数据。
