提分策略:数据采样方法最全总结!

Datawhale

共 3272字,需浏览 7分钟

 · 2020-11-27

采样策略汇总




背景


数据采样很多人都听过,书上亦或是博客上面,但并不是每个人在实践中都会用到,按实践经验来讲,原始数据包含了所有的信息,我们随意增加数据亦或者是删除数据,完全是没有必要的操作。那为什么要采样?又有哪些采样策略?这些策略又大概能带来什么帮助呢?怎么做?需要注意什么?本文对数据采样做个简单的汇总。有些是个人理解(例如伪标签等),可能存在些许小的争议,大家按自己理解参考融入自己知识体系即可。


采样策略汇总


1.随机降采样


常见使用场景


1.大数据分析
:随机采样在数据竞赛中,我们一般当数据非常大的时候,而我们本地的机器又load不了这么多数据,亦或是我们的机器能load进这么多数据,但是在做一些分析时特别耗时,那么这个时候我们一般会随机采样一定百分比的数据来进行数据的分析,使我们对数据的属性有较好的了解。

2.模型训练验证:在很多问题中我们的数据量是巨大的,例如搜索推荐等问题,我们的用户数都是上亿的,这个时候我们的数据动则上几十亿,做完特征之后可能都会上PB级别,这个时候如果还是采用全量数据训练的话,那么可能一个模型需要一周甚至更久才会看到效果,这样的迭代速度往往是不能接受的,所以我们需要不断的采样,在保证我们线下有提升的同时线上全量时也有提升;

操作

直接随机sample,亦或是直接截取topN%的数据。

注意

模型训练预测时,先做特征再采样再集成


2.Tomek Links采样



常见使用场景

模型训练:该方法一般个人很少在数据分析时使用,往往是在模型训练的时候,Tomek Links会将决策边界附近的样本剔除,整理出一个看上去更加易于分割的决策边界。在模型训练的时候有尝试过,效果略有下降,有兴趣的朋友可以自己尝试一下。

操作

python的imblearn中有TomekLinks采样。

注意

3.基于聚类中心的采样



常见使用场景

数据分析:该方法思路很简单,就是先聚类然后用聚类中心作为采样的点代表整个类中的样本,比如100个样本聚类成了10个,那么就可以用10个点来代表这100个样本,从而达到降采样的作用。一般用作数据分析可视化相对较好,用于模型训练可能效果会差一些。

操作

python的imblearn中有ClusterCentroids采样。

注意

4.时间序列采样



常见使用场景

时间验证分析:几乎所有涉及到时间的问题,例如推荐问题,销量预测,流量预测等问题在线下验证的时候都需要按照时间顺序进行划分,因为存在较强的时间关系,如果使用未来的信息肯定会导致穿越问题,带来线上线下不一致,导致所有线下的实验都是白努力。所以如果应用在工业实践中,必须在做任何特征工程之前就将数据进行拆分,然后再进行特征建模。

操作

直接按照某个特定的时间轴进行切分即可,选择python里面也有TimeSeriesSplit等函数。

注意

某些特殊节假日等数据考虑剔除最好。


5.分组采样



常见使用场景

防止穿越:也可以认为是防止穿越的一种,例如我们用户一次在一个页面中只会点击一个商品,而如果我们随机采样线下训练验证的话,就会出现一个页面中的不同item被分配到训练集和验证集中,这个时候我们只要发现训练集中的item有被点击的情况,那么在验证集中的样本肯定就是没有点击的,而这明显是出现了穿越,出现了我们的验证分数虚高的情况,所以此时按照页面进行分组采样时更好更靠谱的选择。

操作

目前python的采样策略中已经有现成的分组采样包GroupKFold,直接调用即可。

注意

6.分层采样



常见使用场景

数据验证:举个例子,训练集合有三个城镇的数据,A城镇有100万样本,B城镇有10万样本,C城镇有1万样本,测试集的比例类似。这个时候我们需要对其进行分析验证,如果随机采样训练验证,会出现我们把C城镇的样本全部采样到了训练集合里面,那么此时我们的验证的分数和测试的分数相差较大,而且五折的时候因为采样的问题折折的gap也不是很稳定。这个时候分层采样就十分重要了。

操作

目前python的采样策略中已经有现成的分层采样包,直接调用即可。

注意

7.简单过采样


常见使用场景

类别不平衡:过采样一般出现在类别不平衡问题中,对label较少的样本进行过采样,用来降低过拟合的风险。

操作

很简单,直接random一定比例拷贝即可。

注意

过采样不同的比例训练模型预测再进行集成往往效果更好。


8.SMOTE过采样


常见使用场景

类别不平衡:很简单过采样类似, SMOTE过采样也经常出现在类别不平衡问题中,通过与类别少的样本最近的K个近邻点构建相似的样本,来缓解类别不平衡的问题,降低过拟合的风险。不过很多实验证明,SMOTE采样最终的训练效果要略好于随机的复制形式的过采样。

操作

目前python自带SMOTE函数,直接调用即可。

注意

9.翻转裁剪等数字图像处理常见方案



常见使用场景

数字图像处理:这是一种数据扩充的方案,通过翻转,裁剪等操作来处理图片从而扩充数据样本。

操作

目前python里面处理图像的函数中一般都自带。

注意

10.GAN生成对抗样本



GAN从诞生到现在都很火,所以在很多竞赛中也都会听到有很多选手使用GAN模型生成一些新样本用于模型训练,因为成功案例不多,没有深入了解。建议对GAN非常熟练的朋友可以构建一些成功案例。

11.人工采样or外部数据

常见使用场景

可以拿到相关数据的所有场景。现在有很多数据是可以通过外部数据得到的,比如很多标注图片,还有一些数据是可以通过人工进行收集的,比如一些手机的行为等数据。

操作

上网或者自行收集。

注意

12.伪标签


常见使用场景

几乎所有场景:伪标签技术其实是一种半监督技术,它用在训练集合上训练好的模型对测试集进行预测,然后选取测试集高置信度的样本加入到训练集中,也类似于数据扩充了,所以我把它加入进来,仅供参考。

操作

参见之前的伪标签技术。

注意

可多轮迭代,需要微调置信度。


参考文献


  1. Strategies for Addressing Class Imbalance:https://medium.com/@ODSC/strategies-for-addressing-class-imbalance-5b31b73f7b6f
  2. The 5 Sampling Algorithms every Data Scientist need to know:https://towardsdatascience.com/the-5-sampling-algorithms-every-data-scientist-need-to-know-43c7bc11d17c
  3. https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection
  4. Tackling Class imbalance:https://www.kaggle.com/shahules/tackling-class-imbalance
  5. Learning from Imbalanced Classes:https://www.svds.com/learning-imbalanced-classes/
  6. Dealing with Imbalance Data:https://medium.com/@patiladitya81295/dealing-with-imbalance-data-1bacc7d68dff
  7. Resampling strategies for imbalanced datasets:https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets


“干货学习,三连
浏览 79
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报