Adversarial Validation

在Kaggle比赛中数据分布一致是阻碍大家上分的点,本篇文章将介绍Adversarial Validation原理和使用方法,并对数据分布不一致的情况给出一些解决案例。

原创文章不易,希望分享、点击再看和收藏,谢谢!

Adversarial Validation

Kaggle比赛中数据可分为训练集和测试集,国内比赛可能根据比赛阶段划分多个测试集,由于数据集采样和分布的原因导致训练集和线上测试集可能存在分布不一致的情况,也会带来本地交叉验证(Cross Validatation, CV)与线上不一致的情况。

Adversarial Validation核心思路是构建一个分类模型,目的是分辨训练集和测试集的来源,这里假设使用AUC作为分类精度评价函数。

  • 如果分类模型无法分辨样本(AUC接近0.5),则说明训练集和测试集数据分布比较一致;

  • 如果分类模型可以很好分辨样本(AUC接近1),则说明训练集和测试集数据分布不太一致;

使用Adversarial Validation方法也非常简单,将训练集和测试集分别打上不同的标签然后进行训练,代码思路如下:

train = pd.read_csv( 'data/train.csv' )
test = pd.read_csv( 'data/test.csv' )train['TARGET'] = 1
test['TARGET'] = 0data = pd.concat(( train, test ))
x = data.drop( [ 'TARGET', 'ID' ], axis = 1 )
y = data.TARGETfrom sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y)

在训练集和测试集分布一致的情况中,构建模型的验证AUC一般接近0.5,即分类模型无法判别样本来源:

# logistic regression / AUC: 49.82%
# random forest, 10 trees / AUC: 50.05%
# random forest, 100 trees / AUC: 49.95%

在训练集和测试集分布不一致的情况中,构建模型得到的AUC一般接近1,即分类模型可以分辨样本的来源。此时本地CV和线上就容易出现不止的情况。

数据分布不一致怎么办?

当使用Adversarial Validation验证或者手工验证发现训练集和测试集分布存在差异时,可以有哪些做法?

  • 假设存在多个训练集,可以使用Adversarial Validation与测试集分布比较一致的一个训练集进行训练;

在IJCAI2018里,数据A是前六天的数据,数据B是第七天上半天的数据;在Ogeek里,数据A有两百万数据,数据B只有五万数据;在联通个性化推荐比赛,数据A有初赛约70W数据,数据B有复赛约35W数据。

此种情况一般存在于国内的多阶段比赛会放出多个训练集,比较好的方法是选择与测试集最为相似的一份训练集(假设为数据B)进行训练。

当然其他的训练数据(与测试集不相似,假设为数据A)可以被利用,可以先在数据A上进行预训练,然后在数据B上进行微调,完成迁移学习(或称为嫁接学习)。

https://zhuanlan.zhihu.com/p/51901122

  • 假设Adversarial Validation的AUC非常高,可以尝试使用Adversarial Validation选择出与测试集比较相似的样本,构建成为验证集。

  • 假设数据集可以扩增,则可以使用外部数据来扩增训练数据,以保证训练数据与测试数据的一致性。

当然但数据分布不一致的时候,上述情况都需要反复进行尝试,不同的数据集具体情况不一样。同时Adversarial Validation也只能给出一些指导建议,具体还是要通过提交来验证具体思路的正确性。

最后Adversarial Validation也可以用于验证AB榜shake up的可能性,过拟合CV有风险。Do not trust your local CV!

阅读链接

  • https://www.kaggle.com/h4211819/adversarial-validation

  • http://fastml.com/adversarial-validation-part-two/

  • http://fastml.com/adversarial-validation-part-one/

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am喜欢文章,点个在看

Kaggle知识点:数据分布不一致的验证相关推荐

  1. Kaggle知识点:数据分析思路与工具(EDA)

    Kaggle知识点 数据分析 在现有数据竞赛和数据领域中数据分析是重要组成部分,且数据分析与具体的业务背景和业务逻辑联系紧密.数据分析是发现数据规律的有效方法,也是验证思路的有效方法. 本文将以Kag ...

  2. 【竞赛相关】Kaggle知识点:入门到进阶的10个问题

    Kaggle知识点 在我们之前的分享中我们大多以具体的竞赛案例,如某个竞赛的Top解决方案来讲解具体的比赛.那么是不是有更好的学习方法呢? 答案是肯定有,大部分Kaggle赛题都是相通或者类似的,还有 ...

  3. 【数据竞赛】Kaggle知识点:入门到进阶的10个问题

    Kaggle知识点 在我们之前的分享中我们大多以具体的竞赛案例,如某个竞赛的Top解决方案来讲解具体的比赛.那么是不是有更好的学习方法呢? 答案是肯定有,大部分Kaggle赛题都是相通或者类似的,还有 ...

  4. Kaggle知识点:数据分析EDA

    Kaggle知识点 数据分析 在现有数据竞赛和数据领域中数据分析是重要组成部分,且数据分析与具体的业务背景和业务逻辑联系紧密.数据分析是发现数据规律的有效方法,也是验证思路的有效方法. 本文将以Kag ...

  5. Kaggle知识点:数据扩增方法

    在Kaggle视觉竞赛中,数据扩增(Data Augmentation)是不可少的环节.数据扩增可以增加训练集的样本,同时也可以有效环节模型过拟合的情况,也可以给模型带来的更强的泛化能力.本文将全面介 ...

  6. 【数据竞赛】Kaggle知识点:树模型特征Embedding

    在对数据进行编码的过程中,经常会遇到一些非结构化的字段(如列表.文本),或者高维稀疏的字段. 在使用树模型的过程中,上述字段对树模型很不友好,会增加树模型的训练时间,一般情况需要通过人工特征提取,然后 ...

  7. Kaggle下载数据集时手机号码验证解决方案

    想下载kaggle上的一个比赛数据集但是需要验证手机号码 不是显示输入格式错误就是always sending 提示我说waiting at least 24 hours. ARE YOU KIDDI ...

  8. Kaggle知识点:时序数据与Embedding

    时序数据与Embedding 在最近查看腾讯赛赛题介绍的时候突然发现赛题有点熟悉,进而在看渔佬对今年腾讯赛分享,以及大白对DCIC海洋赛的比赛总结时,思路逐渐清晰:所有的时序序列都可以用Embeddi ...

  9. cuda nvcc版本不一致_windows 验证CUDA和CUDNN是否安装成功

    安装完成CUDA,使用 nvcc -V 验证是否安装成功,看到如下信息说明安装成功 接下来就可以安装 cuDNN 了. 安装cuDNN 下载 cuDNN,下载之前需要先注册一下 Nvidia 的账号, ...

最新文章

  1. Silverlight C# 游戏开发:Flyer01开发一个有趣的游戏
  2. as f报错 open with_一篇文章了解python常见内置异常报错
  3. 网站维护:Linux服务器查看外网访问IP指令汇总
  4. ADVA收购Overture 扩张NFV产品线
  5. FPGA学习之路—接口(2)—I2C协议详解+Verilog源码分析
  6. python开源考试_Github 上 10 个值得学习的 Springboot 开源项目
  7. 2021年中国低密度PET泡沫市场趋势报告、技术动态创新及2027年市场预测
  8. dls 深度受限搜索java_JAVA深入学习(栈和队列)之栈
  9. 酷源KYCMS内容网站管理系统
  10. 智能化漏洞挖掘技术总结
  11. uni-app云开发的网盘助手微信小程序源码抓取网盘资源引流好助手
  12. 吉祥物,送吉祥(续更)
  13. 局域网内通过ip获取主机名
  14. Ubuntu下安装Python的Tkinter和Pmw库
  15. Echarts仪表盘的大小调整
  16. 商务型网站建设多少钱
  17. 看这里 一步学会ubuntu 16.04 安装windos的应用, 使用sscom串口工具来调试
  18. 三维家导入户型镜像怎么使用_三维家设计中如何镜像?
  19. ESXI6.7升级到ESXI7.0
  20. 三体中的科学:人列计算机

热门文章

  1. excel单元格下拉菜单
  2. [转].NET学习网站收集
  3. object.defineProperty
  4. (转载)关于stm32编译后的代码空间和ram占用
  5. Thread pool引起的程序连接数据库响应慢
  6. 新旧apache HttpClient 获取httpClient方法
  7. [C++][数据结构]栈(stack)的实现
  8. Individual Project
  9. 美国人跨入中产行列的6个指标。
  10. Endnote 20.1 Mac Win 2021最新大客户稳定