【总结】机器学习(深度学习)中数据问题的处理方法
1.非均衡数据集的处理方法 参考链接:https://www.zhihu.com/question/30492527
i) 推荐看一下Haibo He, Edwardo A. Garcia的Learning from Imbalanced Data(据说这篇论文对非均衡数据很赞)这篇paper,写的很系统也很清晰。主要包括四大类方法,1.Sampling 2.Cost Sensitive Methods 3.Kernal-Based Methods and Active Learning Methods 4.One-Class Learning or Novelty Detection Methods。
Sampling大类说到底就是两种可能。第一种是把多的那个组变少,第二种是把少的那个组变多,以达到平衡的结果。一般比较少用第一种,因为那样容易丢失重要信息。对于第二种,又有很多方法,最简单的是oversampling,由于其局限性,又有很多根据已有的数据生成新数据的方法,比如各种变体的synthetic sampling。
第二种思路是基于把多数组猜成少数组和把少数组猜成多数组的cost是不同的这个事实,来修正数据分布(个人理解可以当成采到样的概率)的方法。
另外,kernal类的模型,还可以通过修改核函数来偏移hyperplane,来抵消不平衡数据造成的hyperplane的偏移。
最后一大类没有看过相关paper,不了解。。
ii) 在两类比例非常不均衡的情况下,就不能再用「分类正确率」(accuracy)来衡量模型性能,而要用少数类的「准确率」(precision)和「召回率」(recall),或者二者的综合(F1, equal error rate, area under curve 等等)。
第二种思路是基于把多数组猜成少数组和把少数组猜成多数组的cost是不同的这个事实,来修正数据分布(个人理解可以当成采到样的概率)的方法。
另外,kernal类的模型,还可以通过修改核函数来偏移hyperplane,来抵消不平衡数据造成的hyperplane的偏移。
最后一大类没有看过相关paper,不了解。。
在训练时,如果能够把这些评价指标作为目标函数,那是最好的。
如果你的模型只支持用分类正确率作为目标函数,那么可以有下面几种对策:- 调整两类训练样本的权重,使得两类的总权重相等。这是最省事的办法。
- 如果你的模型不支持类加权或样本加权,那么可以把少数类的数据复制几份,使得两类数据量基本相同。这与加权重是等效的,但是会浪费空间和时间。
- 把少数类的数据复制几份,并适当加噪声。这可以增强模型的鲁棒性。
- 加噪声可以拓展到一般的 data augmentation —— 根据已有数据生成新的数据,但保证类别相同。data augmentation 的方法有很多,不同性质的数据,augmentation 的方法也不一样。例如,图像数据可以平移、放缩、旋转、翻转等等。
- 如果多数类的数据量太大,也可以从中随机地取一小部分。当然,此方法一般要与上面 1~4 结合使用。