1. background
前端时间想换工作,于是面了几家公司。发现了公司面试基本会问当数据集分布不平衡的时候该怎么处理。在现实做项目的时候这种情况也会很多。于是做了一下整理。
2. 数据不平衡
数据不平衡的情况主要出现在二分类。比如现在公司做的重要邮件检测。几千个邮件只有几百个重要邮件,其他都是不重要邮件。这样带来的问题是,你想要检测的数量小的损失率带来的整体影响很小。(比如你把所有小类的95%都分错了带来的影响 对于整体来说也可能不大)。所以在评价的时候看着数据很不错,为啥实际应用却检测不出来这样的结果。而且数据量小也就代表信息少,效果不会很好也能预想到。
3. 一般方法
数据不平衡的解决方法一般分为两种:
1. 采样法
2. 惩罚法
这篇先来介绍一下采样法。
4. 采样法
采样法有如下几种
1. 过采样(Oversampling)
2. 欠采样(Undersampling)
4.1 过采样:
过采样就是把小类数据给扩大,把数据多复制几份之类的。但是显而易见这种做法会明显增加过拟合现象。导致测试集中表现良好,实际中效果很差。觉得比较好的方法使人工制造数据。在一定规律下,自己生成新的小类数据已达到扩充小类数据样本的目的。然而问题是如何制造这些数据,感觉这块学问比较大。此前在邮件分类中自动生成新的重要邮件。然而效果不是特别好,不知道是不是因为本身生成的样本有问题。
4.2 欠采样:
欠采样是指把大类样本缩小。可以随机去掉一些数据使得数据集平衡。然而这会使大量信息丢失。大数据大数据肯定数据越多越好,这样做的话感觉很损失。可以采样类似于随机森林一样的做法,随机有放回的生成多个缩小的大类数据,每个小版本大类数据和小类整合成一个新数据集,在各个新数据集中进行分类,使用多数决的方法确定最后结果。(个人感觉这种做法效果应该还好。)