当前位置: 首页 > 科技观察

干货|如何处理机器学习中的不平衡分类问题?

时间:2023-03-15 00:48:24 科技观察

在处理机器学习等数据科学问题时,我们经常会遇到类别分布不平衡的情况,即样本数据中一个或多个类别的观测值明显小于其他类别的观测值。当我们更关注少数问题时,例如窃电、银行欺诈交易、罕见病鉴定等,这种现象会非常突出。在这种情况下,使用传统机器学习算法的预测模型可能无法准确预测。这是因为无论物种平衡如何,机器学习算法通常都会通过减少错误来提高准确性。本文介绍了解决这种不平衡分类问题的不同方法,同时说明了这些方法的优缺点。不平衡数据集一般是指少数类所占比例小于5%的数据集,少数类通常是指罕见事件的发生。例如,在一个公开的欺诈检测数据集中,有如下数据:总观测数据=1000个欺诈观测数据=20个非欺诈观测数据=980个事故率=2%分析这个数据集时的主要问题是如何获得具有适当样本数量的罕见事件的平衡数据集?传统的模型评估方法无法准确评估在不平衡数据集上训练的模型的性能。显然,该模型倾向于预测多数集,而少数集可能被视为噪声或被忽略。因此,少数集比多数集更容易被错误分类。在训练具有不平衡数据集的模型时,准确性不是合适的衡量标准。如果一个分类器能达到98%的准确率,我们就会认为这个模型表现的很好,而对于一个少数集占总数2%的数据集,如果分类器全部预测为多数集,准确率会为98%。它可以达到98%,但是这个分类器对预测没有用。不平衡数据集解决方案解决由不平衡数据集导致的模型预测不准确问题的方法主要有两种。第一种方法是在数据层面将数据集转化为更平衡的数据集,然后进行建模;二是在算法层面提升算法模型的性能。数据级方法:重采样在将数据用于建模之前应用重采样技术来平衡数据。平衡数据主要通过两种方式实现:增加少数类的频率或减少多数类的频率。通过重采样改变两个类别的比例。随机欠采样随机欠采样技术通过随机删除多数类的实例来平衡类分布。在前面的例子中,我们不放回地取了10%的非欺诈数据,将所有的欺诈数据组合起来形成一个新的数据集。这样总的观测数据就变成了20+980*10%=118,欠采样后的新数据集的事件率为20/118=17%。当训练数据很大时,随机欠采样通过减少训练数据量来提高运行时间并解决存储问题。然而,这也带来了潜在有效信息被删除的问题。欠采样选择的数据可能是有偏差的样本,不能准确代表总体。因此,它会导致在测试集上的性能不佳。随机过采样过采样技术是通过随机复制少数类的实例来增加少数类的数量。在前面的例子中,将20个少数类实例复制20次,使得少数类数据变为400个,总观测数据变为980+400=1380个,事件发生的概率为400/1380=29%。与欠采样不同,过采样不会丢失任何信息。一般来说,过采样比欠采样表现更好。但是,由于过采样会多次复制少数类数据,因此过拟合的可能性变大。Clustering-basedoversampling基于聚类的过采样是将k-means聚类算法分别应用于少数类和多数类,以识别数据集中的不同簇。随后,对每个集群进行过采样,以确保多数类和少数类的集群中的实例数量相等。假设对刚才的数据集聚类结果如下:大多数簇:簇1:150个观测数据簇2:120个观测数据簇3:230个观测数据簇4:200个观测数据簇5:150个观测数据簇6:130观测数据的少数簇:簇1:8个观测数据簇2:12个观测数据簇过采样后,同一类型的每个簇包含相同数量的观测数据:多数簇:簇1:170个观测数据簇2:170个观测值Cluster3:170个观测值Cluster4:170个观测值Cluster5:170个观测值Cluster6:170个观测值Minoritycluster:Cluster1:250个观测值Cluster2:250个观测值Cluster-basedoversampling之后,事件率是500/(1020+500)=33%。该方法考虑了多数类和少数类由不同的簇组成,解决了每个簇包含不同实例的问题。然而,由于这是一种过采样技术,它也可能导致过度拟合。SyntheticMinorityOversampling(SMOTE)SMOTE避免了复制少数类导致的过拟合问题。少数类的一个子集用于创建新的合成相似少数类实例。这些合成实例被添加到原始数据集中,以丰富少数类的数据。下图显示了如何创建合成实例。图1:通过SMOTE创建合成实例还是沿用前面的例子,在少数类中选取15个样本实例,合成20个新数据。少数类数据的个数变为300,事件发生率为300/1280=23.4%。该方法通过合成新数据,在不造成有效信息损失的情况下,缓解了复制少数类引起的过拟合问题。但是,在合成新实例时不考虑与其他类相邻的实例,这可能会导致类重叠并可能增加额外的噪声。算法采集技术上面提到的技术都是通过对原始数据集进行重采样得到一个平衡的数据集。在这一部分中,我们将修改现有的分类算法,使其适用于不平衡的数据集。算法综合的目的是提高单个分类器的性能。下图显示了合成算法的方法。图2:基于bagging的算法集成技术方法Bagging是BootstrapAggregating的缩写。传统的bagging算法生成n个可以相互替换的bootstrap训练样本。基于每个样本,训练不同的模型,最后聚合这些模型的预测结果。Bagging可以减少过度拟合,从而创建更准确的预测模型。与boosting不同,bagging允许替换训练样本集。下图展示了bagging的过程。图3:Bagging方法在前面的示例中,从总体中交替抽取10个bootstrap样本,每个样本包含200个观察值。每个样本与原始数据不同,但在分布和可变性方面相似。很多机器学习算法都可以用来训练这10个bootstrap样本,比如逻辑回归、神经网络、决策树等,得到10个不同的分类器C1、C2...C10。将这10个分类器组合成一个复合分类器。这种集成算法结合了多个单独分类器的结果以获得更好的复合分类器。Bagging算法提高了机器学习算法的稳定性和准确性,解决了过拟合问题。在嘈杂的数据环境中,bagging比boosting表现更好。基于Boosting的Boosting也是一种算法集成技术,将弱分类器组合起来形成可以准确预测的强分类器。Boosting从为训练集准备的弱分类器开始。弱分类器是指预测精度仅略高于平均值的分类器,数据的微小变化会引起分类模型的大变化。提升是一种提高任何给定学习算法准确性的方法。下图显示了Boosting方法。图4:提升方法下面描述了几种不同的提升技术。AdaBoost是Boosting算法家族中的代表性算法,它通过组合许多弱分类器形成一个准确的预测分类器。每个分类器的目标是对上一轮错误分类的实例进行正确分类。在每一轮之后,错误分类实例的权重增加,正确分类实例的权重减少。将AdaBoost应用于刚才的不平衡数据集,首先给每个实例赋予相同的权重,假设基本分类器只正确分类了400个实例,将这400个实例的权重降低为,剩下的600个被错误分类的实例的权重增加到。在每一轮中,弱分类器通过更新其权重来提高其性能。这个过程一直持续到误分类率显着下降,分类器成为强分类器。AdaBoost的优点是非常容易实现,而且非常通用,适用于各种分类算法,不会造成过拟合。缺点是它对噪声和异常值非常敏感。GradientBoosting是一种优化算法,每个模型依次通过GradientDescent方法使损失函数最小化。在梯度提升中,决策树被视为弱分类器。AdaBoost和GradientBoosting都是将弱分类器变成强分类器的方法,但这两种方法有本质的区别。AdaBoost要求用户在学习过程开始前设置一个弱分类器集或随机生成一个弱分类器集,每个弱分类器的权重会根据分类是否正确进行调整。GradientBoosting是先在训练集上建立分类器预测,然后计算损失值,再利用损失值对分类器进行改进。在每一步中,损失函数的残差都是通过梯度下降法计算的。在随后的迭代中,新的残差成为目标变量。GradientTreeBoosting比RandomForest更难拟合。它有三个可以微调的参数,Shrinkage参数,树的深度和树的数量。只有选择合适的参数,才能得到拟合良好的Gradientboostedtree。如果参数调整不正确,可能会导致过拟合。结论在面对不平衡的数据集时,没有单一的解决方案可以提高所有预测模型的准确性。可能我们需要做的就是尝试不同的方法并找出最适合该数据集的方法。解决不平衡数据集的最有效技术取决于数据集的特征。在大多数情况下,SMOTE等合成采样技术的性能优于传统的过采样和欠采样。为了获得更好的结果,可以同时使用合成采样技术和增强方法。在比较不同的方法时,可以考虑相关的评估参数。在比较使用上述方法建立的多个预测模型时,可以根据ROC曲线下的面积来判断哪个模型更好。