在机器学习任务中,我们经常会遇到这样的问题:数据不均衡问题。数据不平衡问题主要存在于有监督的机器学习任务中。当遇到不平衡数据时,传统的以整体分类准确率为学习目标的分类算法会过分关注多数类,从而降低少数类样本的分类性能。绝大多数常见的机器学习算法都不能很好地处理不平衡的数据集。本文介绍了在数据不平衡的情况下有效训练监督算法的几种有效思路:1.重采样训练集可以使用不同的数据集。有两种方法可以从不平衡的数据集创建平衡的数据集——欠采样和过采样。1.1.欠采样欠采样是通过减少富类的大小来平衡数据集。当数据量足够时,应该使用这种方法。通过保存所有稀有类样本并在丰富类中随机选择相同数量的稀有类样本,可以检索出一个新的平衡数据集用于进一步建模。1.2.过采样相反,当数据量不足时应该使用过采样,它试图通过增加稀有样本的数量而不是去除丰富类的样本数量来平衡数据集。通过使用重复、自举或合成少数过采样方法(SMOTE)生成新的稀有样本。请注意,欠采样和过采样这两种方法之间没有绝对的优势。任何一种方法的应用都取决于它适用的用例和数据集本身。结合过采样和欠采样也是成功的。2.使用K-fold交叉验证值得注意的是,在使用过采样方法解决不平衡问题时应适当应用交叉验证。这是因为过采样观察稀有样本并应用引导程序根据分布函数生成新的随机数据,如果在过采样后应用交叉验证,那么我们所做的就是将我们的模型过度拟合到特定的手动指导结果。这就是为什么交叉验证应该总是在过采样数据之前完成,就像实现特征选择一样。只有过采样数据才能将随机性引入数据集,以确保不会出现过拟合问题。K折交叉验证是将原始数据随机分成K份,选取其中一份作为测试数据,剩下的K-1份作为训练数据。交叉验证的过程其实就是重复实验K次。每个实验从这K个部分中选择不同的部分作为测试数据,其余数据作为实验的训练数据。最后,得到的K次实验的结果是平均的。3.转化为分类问题对于一个分类问题,如果正负样本分布极度不平衡,我们可以换个角度看问题:把它看成分类(OneClassLearning)或者异常检测(新颖性检测)问题。这类方法的重点不是捕捉类之间的差异,而是对其中一个进行建模。经典作品包括One-classSVM等,如下图所示:OneClassSVM是指你的训练数据只有一类Positive(或negative)数据样本,没有另一类。此时,您需要学习的实际上是训练数据的边界。这时候,你不能使用优化的软边,因为你没有两种类型的数据。所以,在这篇文章“Estimatingthesupportofahigh-dimensionaldistribution”中,Sch?lkopf假设***的边缘在特征空间中远离原点。左侧是原始空间中的边界。可以看到符合要求的边界有很多,但是找一个更严密的边界(红色)更靠谱。转换到特征空间的目标是找到一个离原点更远的边界,也是一条红色的直线。当然,这些约束是人为添加的,大家可以根据自己的需要采用相应的约束。例如,让数据的中心离原点最远。说明:对于正负样本极不均匀的问题,用异常检测也是一种思路,或者分类问题。4.成功推广结合不同重采样数据集的模型的最简单方法是使用更多数据。问题在于,逻辑回归或随机森林等开箱即用的分类器倾向于通过丢弃稀有类来进行泛化。模型。一个简单的最佳实践是构建n个模型,每个模型使用来自稀有类的所有样本和来自丰富类的n个不同样本。假设你想组合10个模型,那么你将保留例如1000个稀有类案例,并随机抽取10000个丰富类案例。然后,只需将10000个案例分成10个块并训练10个不同的模型。对于大量数据,这种方法简单且可扩展,因为模型可以在不同的集群节点上训练和运行。集成模型也倾向于泛化,这使得这种方法易于处理。5.Resamplingwithdifferentratios方法4很好地微调了稀有类和丰富类之间的比率,最佳比率在很大程度上取决于所使用的数据和模型。然而,并非所有模型都在集成中以相同的规模进行训练,因此值得尝试合并不同的规模。如果训练了10个模型,那么一个模型的比例为1:1(稀有:丰富)和另一个模型的比例为1:3甚至2:1是有意义的。类获得的权重取决于所使用的模型。6.虽然multi-modelBagging方法5可以选择最佳的样本数据比例。但其鲁棒性无法保证:其鲁棒性取决于测试集样本的选择。为了解决上述方法的不足,增加模型的鲁棒性。为此,受到随机森林算法思想的启发,基于上述方法,萌生了对不同比例下训练的模型进行多模型bagging的想法。具体步骤如下:1).对两类样本选取N组不同比例的数据进行训练和测试,得到模型预测的准确率:P={Pi|i=1,2,…N}2)。将上述模型的精度归一化,得到新的权重分布:Ω={ωi|i=1,2,…N}其中:3)。根据权重分布Ω组合多个模型,作为最终训练器:●对于分类任务:●对于回归任务:7.聚类富集类SergeyQuora提出了一种优雅的方法。他建议不要依靠随机样本来覆盖训练样本的类型,而是将丰富的类别聚类到r个组中,其中r是r中的案例数。每个组只保留聚类中心(medoid)。然后,模型在稀有类和只保留类上进行训练。7.1.聚类丰富类首先,我们可以用大量样本对丰富类进行聚类。假设我们使用的方法是K-Means聚类算法。这时我们可以选择K值作为稀有类的数据样本个数,将聚类后的中心点和对应的聚类中心作为富类样本的代表样本,类标签与富人阶级的阶级标签。7.2.聚类样本的监督学习经过以上步骤的聚类操作,我们筛选出了富类训练样本,接下来我们可以对样本数相等的K个正负样本进行监督训练。如下图所示:8.设计适合不平衡数据集的模型以往的方法都是以数据为中心,将模型作为一个固定的组成部分。但实际上,如果设计的模型适用于不平衡数据,则不需要对数据进行重采样。著名的XGBoost已经是一个很好的起点,因此设计一个适合不平衡数据集的模型是有意义的。通过设计一个成本函数来惩罚对稀有类的错误分类而不是对丰富类的分类,可以设计许多模型来自然地泛化到稀有类。例如,调整SVM以惩罚稀有类别的错误分类。
