数据和特征决定了模型的上限,而模型和算法只是逼近这个上限而已。
相信每个算法从业人员都听过上面的话,从这句话可以也看出数据的重要性。今天来讨论一下数据相关问题,常见的数据问题可分为以下几个:
- 1、数据标签噪音,也即数据的标签是错误的;
- 2、线上线下(或称训练集测试集)数据分布一致性问题;
- 3、数据“好坏”的问题,也即数据的完整性或者缺失问题。
本文主要关注第1、2个问题,对于第3个问题,缺失数据一般可通过均值、众数或模型预测等方法来填充。
标签噪音
标签问题或多或少都会对我们的模型产生负面影响,导致模型的效果下降。对于模型训练来说,其在后期总会有一些样本难以拟合,这些样本我们称之为“难样本”。难样本可简单表示为下图中的两类:
![](https://img.haomeiwen.com/i4264437/60bf4eb896a0ddd5.png)
其中,Borderline examples可认为是正常的难样本,这些样本存在于不同类别样本的交界处,难以区分。而Noisy examples则可认为是错误打标签的样本,若是模型强行去拟合这些错误标签样本,则可能反而会导致模型效果变差,因此在数据预处理的时候我们应想办法处理这些错误标签样本——丢弃或者纠正标签。
常见的过滤错误标签样本的方法有三种:
- 1、集成过滤法(Ensemble Filter,EF);
- 2、交叉验证委员会过滤法(Cross-validation Committes Filter, CVCF);
- 3、迭代分割过滤法(Iterative-Partitioning Filter,IPF)。
集成过滤法 (Ensemble Filter)
![](https://img.haomeiwen.com/i4264437/7cbd8e58c918c2c8.png)
如上所示,集成过滤法可分为两步:
- 1、将数据等分为n部分,其中n-1部分用来作为训练集,每一部分都会训练出一个模型,剩下的那1部分作为验证集;
- 2、每个n-1部分训练出来的模型用来对剩余的那1部分进行预测打标签,n-1个模型采用投票法来进行决策,以对错误标签进行纠正。
交叉验证委员会过滤法 (Cross-validation Committes Filter)
![](https://img.haomeiwen.com/i4264437/74a340b6a8541879.png)
交叉验证委员会过滤法的做法与及集成过滤法类似,也是分为两步:
- 1、将数据等分为n部分,其中n-1部分用来作为训练集,剩下的那1部分作为验证集,此处相当于n折交叉验证;
- 2、利用n折交叉验证可完成对每一个样本的预测,以进行标签纠正。
可以看出交叉验证委员会过滤法和集成过滤是类似的。
迭代分割过滤法(Iterative-Partitioning Filter)
![](https://img.haomeiwen.com/i4264437/20862d5c09d700f2.png)
迭代分割过滤法同样是将数据集分为n部分,每个部分训练一个模型,然后预测并通过投票的方法得到各个样本的label。区别于前两个方法的是每次预测完都会将标记正确的label挑选一部分(y)出来,对于后续样本继续重复此步骤直到不足y。
可以看出,上面三个方法其实主要思想比较类似,即通过类似交叉验证的方法来寻找错误样本。
线上线下(或称训练集测试集)数据分布一致性问题
训练集测试集分布不一致的问题更为常见,熟悉kaggle的都知道kaggle分A榜、B榜,选手在A榜排名很高,却在B榜排名骤降翻车的现象非常多。导致这一现象的原因其实就是两个数据集的分布不一致。
判断数据集分布是否一致可通过Adversarial validation来进行测试,具体可分为两步:
-
1、将训练集和测试集分别随机分为两部分,并分别打上标签,如训练集打上标签0,测试集打标签1。然后将训练集的一部分和测试集一部分合并为Adversarial validation测试的训练集,另外两部分则是合并为Adversarial validation测试的验证集;
-
2、利用上面造出的训练集来训练出一个模型,用来对验证集进行预测,同时还可以对训练集进行预测,计算其auc。auc越接近0.5则表示这两个数据集分布越相近,越大则表明模型分类效果很好,也即我们实际的训练集和测试集分布相差较大。
此外,为了证明我们上面Adversarial validation测试的可行性,最好还分别对训练集和测试集进行一个Adversarial validation测试,以方便比较。
如果auc较大,则表明训练集和测试集分布相差较大。这时可以考虑卡一个阈值,挑选预测概率接近测试集的训练集样本作为训练集,如0.5或更大的值(假设测试集label为1),以使得训练集和测试集数据分布更为接近。这样做也有一个坏处,那就是当我们数据量比较少的时候,过滤完可能会导致数据严重不足。这时候可以考虑使用PUlearning来找到其他样本作为训练集或其他的小样本学习学习方法,当然这是后话了,需要视Adversarial validation测试结果而定。
参考:
https://blog.csdn.net/fengdu78/article/details/105803939
http://fastml.com/adversarial-validation-part-two/
http://fastml.com/adversarial-validation-part-one/
https://sci2s.ugr.es/sites/default/files/files/publications/books/slides/Cap5%20-%20Dealing%20with%20Noisy%20Data.pptx
结构化数据的迁移学习:嫁接学习
网友评论