提分策略:数据采样方法最全总结!
共 3272字,需浏览 7分钟
·
2020-11-27 05:00
采样策略汇总
背景
数据采样很多人都听过,书上亦或是博客上面,但并不是每个人在实践中都会用到,按实践经验来讲,原始数据包含了所有的信息,我们随意增加数据亦或者是删除数据,完全是没有必要的操作。那为什么要采样?又有哪些采样策略?这些策略又大概能带来什么帮助呢?怎么做?需要注意什么?本文对数据采样做个简单的汇总。有些是个人理解(例如伪标签等),可能存在些许小的争议,大家按自己理解参考融入自己知识体系即可。
采样策略汇总
1.随机降采样
常见使用场景
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过采样
常见使用场景
操作
目前python自带SMOTE函数,直接调用即可。
注意
无
9.翻转裁剪等数字图像处理常见方案
数字图像处理:这是一种数据扩充的方案,通过翻转,裁剪等操作来处理图片从而扩充数据样本。
操作
目前python里面处理图像的函数中一般都自带。
注意
无
10.GAN生成对抗样本
11.人工采样or外部数据
常见使用场景
可以拿到相关数据的所有场景。现在有很多数据是可以通过外部数据得到的,比如很多标注图片,还有一些数据是可以通过人工进行收集的,比如一些手机的行为等数据。
操作
上网或者自行收集。
注意
无
12.伪标签
常见使用场景
几乎所有场景:伪标签技术其实是一种半监督技术,它用在训练集合上训练好的模型对测试集进行预测,然后选取测试集高置信度的样本加入到训练集中,也类似于数据扩充了,所以我把它加入进来,仅供参考。操作
参见之前的伪标签技术。
注意
可多轮迭代,需要微调置信度。
参考文献
Strategies for Addressing Class Imbalance:https://medium.com/@ODSC/strategies-for-addressing-class-imbalance-5b31b73f7b6f The 5 Sampling Algorithms every Data Scientist need to know:https://towardsdatascience.com/the-5-sampling-algorithms-every-data-scientist-need-to-know-43c7bc11d17c https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection Tackling Class imbalance:https://www.kaggle.com/shahules/tackling-class-imbalance Learning from Imbalanced Classes:https://www.svds.com/learning-imbalanced-classes/ Dealing with Imbalance Data:https://medium.com/@patiladitya81295/dealing-with-imbalance-data-1bacc7d68dff Resampling strategies for imbalanced datasets:https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets