什么是正负样本不均衡问题?如何解决不均衡的问题?

您所在的位置:网站首页 什么是灰色模型 什么是正负样本不均衡问题?如何解决不均衡的问题?

什么是正负样本不均衡问题?如何解决不均衡的问题?

#什么是正负样本不均衡问题?如何解决不均衡的问题?| 来源: 网络整理| 查看: 265

举一个例子,来直观地感受一下样本不平衡问题。

假设根据1000个正样本和1000个负样本正确训练出了一个查准率90%召回率90%的分类器,且通过实验验证没有欠采样过采样的问题。模型上线后即开始正式预测每天的未知样本。也许开始的时候这个模型的准确率和召回率都很好。

有一天,数据发生了一点变化,还是原来的数据类型和特征,只是每天新数据中正负样本变成了100个正样本,10000个负样本。

请注意,先前准确率90%的另一种表达是负样本有10%的概率被误检为正样本。好了,模型不变,现在误检的负样本数是10000*0.1=1000个,正样本被检出100*0.9(召回)=90个,好了,这个时候召回率不变仍为90%,但是新的准确率=90/(1000+90)=8.26%。

同一个模型仅仅是改变了验证集的正负样本比例,模型已经从可用退化成不可用了。样本不平衡问题可怕就可怕在这,往往你的模型参数、训练、数据、特征都是对的,能做的都做了,但准确率就是上不去。

对于这类问题解决方法有:增加小类样本数据,减少大类样本数据,尝试不同的分类算法,避免使用准确度这样的模型评价指标而应该使用混淆矩阵、ROC曲线等来评价,还可以把小类当作异常点来进行检测。

下面详细讲解其中的几个相关方法。

1)过采样小样本(SMOTE)

即该算法构造的数据是新样本,原数据集中不存在的。该基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了更多的新生数据。优点是相当于合理地对小样本的分类平面进行一定程度的外扩,也相当于对小类错分进行加权惩罚。

当数据量不足时就应该使用过采样,它尝试通过增加稀有样本的数量来平衡数据集,而不是去除丰富类别的样本数量。

2)欠采样大样本

设小类中有 N 个样本。将大类聚类成 N 个簇,然后使用每个簇的中心组成大类中的 N 个样本,加上小类中所有的样本进行训练。优点是保留了大类在特征空间的分布特性,又降低了大类数据的数目。

欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该使用此方法。通过保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相等数量的样本,可以检索平衡的新数据集以进一步建模。

注意,欠采样和过采样这两种方法相比而言,都没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。另外,将过采样和欠采样结合起来使用也是成功的。

3)使用K-fold交叉验证

值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自动生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。

4)对小类错分进行加权惩罚

对分类器的小类样本数据增加权值,降低大类样本的权值【注释:这种方法其实是产生了新的数据分布,即产生了新的数据集】,从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。

对小样本进行过采样(例如含 L 倍的重复数据),其实在计算小样本错分时会累加 L 倍的惩罚分数。

5)分治(ensemble)

该策略将大类中样本聚类到 L 个聚类中,然后训练 L 个分类器,每个分类器使用大类中的一个簇与所有的小类样本进行训练得到,最后对这 L 个分类器采取少数服从多数对未知类别数据进行分类,如果是连续值(预测),那么采用平均值。

6)分层级(ensemble)

使用原始数据集训练第一个学习器 L 1,将 L 1错分的数据集作为新的数据集训练 L 2,再将 L 1和 L 2分类结果不一致的数据作为数据集训练 L 3,最后测试集上将3个分类器的结果汇总(结合这3个分类器,采用投票的方式来决定分类结果,因此只有当 L 2与 L 3都分类为false时,最终结果才为false,否则为true。)

7)转化为异常检测的分类

用异常检测算法(如高斯混合模型、聚类等)检测得到离群点或异常点,再对这些异常点为训练集学习一个分类器。

对于二分类问题,如果正负样本分布比例极不平衡,我们可以换一个完全不同的角度来看待问题:把它看作一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-Class SVM等。

One-Class SVM是指你的训练数据只有一类正(或者负)样本的数据,而没有另外的一类。此时,需要学习的实际上是训练数据的边界。而这时不能使用最大化软边缘了,因为没有两类的数据。

8)组合不同的重采样数据集

成功泛化模型的最简单方法是使用更多的数据,问题是像逻辑回归或随机森林这样开箱即用的分类器,倾向于通过舍去稀有类来泛化模型。一个简单的最佳实践是建立 n 个模型,每个模型使用稀有类别的所有样本和丰富类别的 n 个不同样本。假设想要合并10个模型,那么将保留例如1000例稀有类别,并随机抽取10000例丰富类别。然后,只需将10000个案例分成10块,并训练10个不同的模型。

如果拥有大量数据,这种方法是简单并且是可横向扩展的,这是因为可以在不同的集群节点上训练和运行模型。集合模型也趋于泛化,使得该方法易于处理。

9)用不同比例重新采样

方法8可以很好地将样本稀有类别和样本丰富类别之间的比例进行微调,最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,所以值得尝试合并不同的比例。如果10个模型被训练,有一个模型比例为1:1(稀有∶丰富)和另一个1:3甚至是2:1的模型都是有意义的。一个类别获得的权重依赖于使用的模型。

10)集群丰富类

Sergey Quora提出了一种优雅的方法,他建议不要依赖随机样本来覆盖训练样本的种类,而是将 r 个群体中丰富类别进行聚类,其中 r 为 r 中的例数。每个组只保留集群中心。然后,基于稀有类和仅保留的类别对该模型进行训练。

假设我们使用的方法是Kmeans聚类算法。此时,我们可以选择 K 值为稀有类中的数据样本的个数,并将聚类后的中心点以及相应的聚类中心当作富类样本的代表样例,类标与富类类标一致。

经过上述步骤的聚类操作,我们对富类训练样本进行了筛选,接下来就可以将相等样本数的 K 个正负样本进行有监督训练。

11)设计适用于不平衡数据集的模型

前面的方法都集中在数据上,并将模型保持为固定的组件。但事实上,如果设计的模型适用于不平衡数据,则不需要重新采样数据,著名的XGBoost已经是一个很好的起点,因此设计一个适用于不平衡数据集的模型也是很有意义的。

通过设计一个代价函数来惩罚稀有类别的错误分类而不是分类丰富类别,可以设计出许多自然泛化为稀有类别的模型。例如,调整SVM以惩罚稀有类别的错误分类。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3