机器学习中非均衡数据集的处理方法?
https://www.zhihu.com/question/30492527
Sampling大类说到底就是两种可能。第一种是把多的那个组变少,第二种是把少的那个组变多,以达到平衡的结果。一般比较少用第一种,因为那样容易丢失重要信息。对于第二种,又有很多方法,最简单的是oversampling,由于其局限性,又有很多根据已有的数据生成新数据的方法,比如各种变体的synthetic sampling。
第二种思路是基于把多数组猜成少数组和把少数组猜成多数组的cost是不同的这个事实,来修正数据分布(个人理解可以当成采到样的概率)的方法。
另外,kernal类的模型,还可以通过修改核函数来偏移hyperplane,来抵消不平衡数据造成的hyperplane的偏移。
链接:https://www.zhihu.com/question/30492527/answer/48332415
在两类比例非常不均衡的情况下,就不能再用「分类正确率」(accuracy)来衡量模型性能,而要用少数类的「准确率」(precision)和「召回率」(recall),或者二者的综合(F1, equal error rate, area under curve 等等)。
在训练时,如果能够把这些评价指标作为目标函数,那是最好的。
如果你的模型只支持用分类正确率作为目标函数,那么可以有下面几种对策:- 调整两类训练样本的权重,使得两类的总权重相等。这是最省事的办法。
- 如果你的模型不支持类加权或样本加权,那么可以把少数类的数据复制几份,使得两类数据量基本相同。这与加权重是等效的,但是会浪费空间和时间。
- 把少数类的数据复制几份,并适当加噪声。这可以增强模型的鲁棒性。
- 加噪声可以拓展到一般的 data augmentation —— 根据已有数据生成新的数据,但保证类别相同。data augmentation 的方法有很多,不同性质的数据,augmentation 的方法也不一样。例如,图像数据可以平移、放缩、旋转、翻转等等。
- 如果多数类的数据量太大,也可以从中随机地取一小部分。当然,此方法一般要与上面 1~4 结合使用。
通过过抽样和欠抽样解决样本不均衡
抽样是解决样本分布不均衡相对简单且常用的方法,包括过抽样和欠抽样两种。
过抽样
过抽样(也叫上采样、over-sampling)方法通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,例如SMOTE算法。
欠抽样
欠抽样(也叫下采样、under-sampling)方法通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。
总体上,过抽样和欠抽样更适合大数据分布不均衡的情况,尤其是第一种(过抽样)方法应用更加广泛。
通过正负样本的惩罚权重解决样本不均衡
通过正负样本的惩罚权重解决样本不均衡的问题的思想是在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。
使用这种方法时需要对样本本身做额外处理,只需在算法模型的参数中进行相应设置即可。很多模型和算法中都有基于类别参数的调整设置,以scikit-learn中的SVM为例,通过在class_weight : {dict, 'balanced'}中针对不同类别针对不同的权重,来手动指定不同类别的权重。如果使用其默认的方法balanced,那么SVM会将权重设置为与不同类别样本数量呈反比的权重来做自动均衡处理,计算公式为:n_samples / (n_classes * np.bincount(y))。
如果算法本身支持,这种思路是更加简单且高效的方法。
通过组合/集成方法解决样本不均衡
组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。
例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。
这种解决问题的思路类似于随机森林。在随机森林中,虽然每个小决策树的分类能力很弱,但是通过大量的“小树”组合形成的“森林”具有良好的模型预测能力。
如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。
通过特征选择解决样本不均衡
上述几种方法都是基于数据行的操作,通过多种途径来使得不同类别的样本数据行记录均衡。除此以外,还可以考虑使用或辅助于基于列的特征选择方法。
一般情况下,样本不均衡也会导致特征分布不均衡,但如果小类别样本量具有一定的规模,那么意味着其特征值的分布较为均匀,可通过选择具有显著型的特征配合参与解决样本不均衡问题,也能在一定程度上提高模型效果。
提示 上述几种方法的思路都是基于分类问题解决的。实际上,这种从大规模数据中寻找罕见数据的情况,也可以使用非监督式的学习方法,例如使用One-class SVM进行异常检测。分类是监督式方法,前期是基于带有标签(Label)的数据进行分类预测;而采用非监督式方法,则是使用除了标签以外的其他特征进行模型拟合,这样也能得到异常数据记录。所以,要解决异常检测类的问题,先是考虑整体思路,然后再考虑方法模型。