当前位置: 首页 > article >正文

【AI知识点】Adversarial Validation(对抗验证)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】


Adversarial Validation(对抗验证) 是一种用于检查 训练集(Train Set)和测试集(Test Set)是否同分布 的方法。它借助 对抗学习(Adversarial Learning) 思想,将原本的训练数据与测试数据合并,并构造一个二分类模型来判断样本来自训练集还是测试集。如果模型能够 轻松区分两者,说明数据分布存在较大差异,可能导致模型泛化能力下降。


1. 为什么需要 Adversarial Validation?

在机器学习任务中,假设 训练数据和测试数据的分布不同

  • 训练时,模型学习的是训练集的分布,但它在测试集上表现不佳。
  • 训练集的特征可能与测试集的特征分布不同(如特定时间段的数据、特定用户群体)。
  • 可能存在数据泄漏,导致训练集比测试集更容易拟合。

如果训练集和测试集分布不同,模型的 泛化能力 可能受影响,甚至会导致排行榜(Leaderboard)上的分数误导。


2. Adversarial Validation 过程

a. 构造数据集

  • 合并训练集和测试集
    • 给训练集样本打上 标签 1(表示真实训练数据)。
    • 给测试集样本打上 标签 0(表示真实测试数据)。

b. 训练二分类模型

  • 用一个 二分类模型(如 LightGBM、XGBoost) 训练一个分类器,尝试区分数据来自训练集还是测试集。

c. 评估模型的区分能力

  • 如果分类器的 AUC 接近 0.5
    • 说明训练集和测试集 分布接近,模型泛化能力可能较好。
  • 如果分类器的 AUC 远高于 0.5(如 0.8+)
    • 说明训练集和测试集的分布存在显著差异,可能需要调整特征或重新采样。

3. 代码示例

Step 1: 准备数据

import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score# 生成示例数据(模拟训练集和测试集分布不同)
np.random.seed(42)
train = pd.DataFrame(np.random.normal(0, 1, (1000, 5)), columns=[f'feature_{i}' for i in range(5)])
test = pd.DataFrame(np.random.normal(1, 1, (1000, 5)), columns=[f'feature_{i}' for i in range(5)])# 添加标签:训练集 = 1,测试集 = 0
train['is_train'] = 1
test['is_train'] = 0# 合并数据
data = pd.concat([train, test], axis=0).reset_index(drop=True)# 提取特征和标签
X = data.drop(columns=['is_train'])
y = data['is_train']

Step 2: 训练对抗分类器

# 划分数据集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)# 训练 LightGBM 模型
params = {'objective': 'binary', 'metric': 'auc', 'verbosity': -1}
train_data = lgb.Dataset(X_train, label=y_train)
valid_data = lgb.Dataset(X_val, label=y_val, reference=train_data)model = lgb.train(params, train_data, valid_sets=[valid_data], num_boost_round=100, early_stopping_rounds=10, verbose_eval=False)# 预测并计算 AUC
y_pred = model.predict(X_val)
auc_score = roc_auc_score(y_val, y_pred)
print(f'Adversarial Validation AUC: {auc_score:.4f}')

4. 结果解读

a. 如果 AUC ≈ 0.5

  • 训练集和测试集分布 相似,模型可以较好泛化。
  • 无需调整数据或特征,可以直接训练模型。

b. 如果 AUC ≫ 0.5(如 0.8+)

  • 训练集和测试集分布 存在显著差异
  • 可能的原因
    • 测试集的某些特征取值范围不同。
    • 训练数据可能存在数据泄漏。
    • 时间序列数据的时间窗口不同。

c. 解决方案

  • 调整特征工程

    • 重新检查 类别特征的分布(如 category 是否相同)。
    • 归一化特征,使训练集和测试集分布更接近。
  • 重采样训练集

    • 通过 欠采样(Undersampling)过采样(Oversampling) 使训练集分布更接近测试集。
  • 移除对抗分类器权重较高的特征

    lgb.plot_importance(model, max_num_features=10)
    
    • 发现最能区分训练集和测试集的特征,并在训练过程中移除它们。

5. 适用场景

  • Kaggle 竞赛
    • 评估训练集和测试集是否同分布,避免 Public LB 分数误导最终排名。
  • 金融风控
    • 贷款违约预测数据的时间窗口是否影响模型泛化。
  • 医学数据
    • 检查不同医院的数据是否分布一致。

6. 总结

步骤内容
构造数据集训练集 label=1,测试集 label=0
训练分类器使用 LGBM/XGBoost 进行二分类
评估 AUCAUC ≈ 0.5 表示分布相似,AUC 高表示分布不同
改进方案调整特征、重采样、去除异常特征

🚀 Adversarial Validation 是 Kaggle 和实际业务中常用的 数据分布检测方法,可以帮助提升模型泛化能力!

相关文章:

【AI知识点】Adversarial Validation(对抗验证)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 Adversarial Validation(对抗验证) 是一种用于检查 训练集(Train Set)和测试集(Test Set)是否同分布 的方法。它…...

力扣 15.三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…...

Spring boot中实现字典管理

数据库脚本 CREATE TABLE data_dict (id bigint NOT NULL COMMENT 主键,dict_code varchar(32) DEFAULT NULL COMMENT 字典编码,dict_name varchar(64) DEFAULT NULL COMMENT 字典名称,dict_description varchar(255) DEFAULT NULL COMMENT 字典描述,dict_status tinyint DEFA…...

唯一值校验的实现思路(续)

本文接着上一篇文章《唯一值校验的实现思路》,在后端实现唯一值校验。用代码实现。 /*** checkUniqueException[唯一值校验]** param entity 新增或编辑的学生实体* param insert 是否新增,如果是传入true;反之传入false* return void* date…...

【AI论文】10亿参数大语言模型能超越405亿参数大语言模型吗?重新思考测试时计算最优缩放

摘要:测试时缩放(Test-Time Scaling,TTS)是一种通过在推理阶段使用额外计算来提高大语言模型(LLMs)性能的重要方法。然而,目前的研究并未系统地分析策略模型、过程奖励模型(Process …...

Ubuntu20.04上搭建nginx正向代理提供上网服务

背景:公司很多电脑因软件管控问题不得不禁止设备上网,现需搭建上网代理服务器提供给这些用户使用。 操作系统:ubuntu20.04 工具:nginx-1.25.4 1、下载nginx安装包及依赖 由于nginx默认只持支持转发http协议,所以如…...

web前端布局--使用element中的Container布局容器

前端页面,跟Qt中一样,都是有布局设置的。 先布局,然后再在各布局中添加显示的内容。 Element网站布局容器:https://element.eleme.cn/#/zh-CN/componet/container 1.将element相应的布局容器代码layout,粘贴到vue项…...

使用 PDF SDK 通过页面分割和数据提取对建筑图纸进行分类

一家专门从事设计和建设的建筑公司对大量多页建筑 PDF 图纸进行分类,从而提高协作和运营效率。 这类公司通常承担多个建筑设计项目,每个项目包含多个设计图纸,如详细的结构计划、电气与水管计划、机械计划等。如果项目图纸可以在上传后自动分…...

Linux命名管道与共享内存

命名管道与共享内存 命名管道介绍和基本使用 理解了匿名管道后,命名管道的理解就会变得容易。在前面使用匿名管道时可以发现,之所以可以匿名是因为由父进程创建,子进程拷贝所以子进程和父进程都可以看到这个管道。但是如果对于任意两个进程…...

maven web项目如何定义filter

在 Maven Web 项目中定义一个 Servlet 过滤器(Filter),需要遵循 Java Servlet 规范,并利用 Maven 来管理项目结构和依赖。下面是如何在 Maven Web 项目中定义和配置一个过滤器的基本步骤: 1. 创建过滤器类 首先&…...

使用 Notepad++ 编辑显示 MarkDown

Notepad 是一款免费的开源文本编辑器,专为 Windows 用户设计。它是替代记事本(Notepad)的最佳选择之一,因为它功能强大且轻量级。Notepad 支持多种编程语言和文件格式,并可以通过插件扩展其功能。 Notepad 是一款功能…...

@synchronized的使用

synchronized 介绍 synchronized 是 Objective-C 提供的一种 互斥锁(Mutex),它用于确保一段代码在同一时间只有一个线程能执行,避免多线程访问共享资源时出现数据竞争。 基本语法 synchronized (lockObject) {// 需要加锁的代码…...

解锁Rust:融合多语言特性的编程利器

如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…...

zyNo.23

SQL注入漏洞 1.SQL语句基础知识 一个数据库由多个表空间组成,sql注入关系到关系型数据库,常见的关系型数据库有MySQL,Postgres,SQLServer,Oracle等 以Mysql为例,输入 mysql-u用户名-p密码 即可登录到MySQL交互式命令行界面。 既然是…...

visual studio 在kylin v10上跨平台编译时c++标准库提示缺少无法打开的问题解决

情况1:提示无法打开 源文件 "string"之类导致无法编译 情况2:能编译,但无法打开这些库文件或标准库使用提示下划红色问题 解决方案: 一、通过工具->选项->跨平台里,在“远程标头IntelliSense管理器”更新下载一下…...

黑马Mistral Le chat逆转deepseek

法国人工智能聊天机器人出来了。 Mistral AI比deepseek 性能快很多,准确率更高,非常好用。 全新的发现! 站在老美已经出来的方法&理论上,感觉有0.2亿美金和有gpu算力,感觉搞一个超越国内deepseek难道其实…...

Spring Cloud — 深入了解Eureka、Ribbon及Feign

Eureka 负责服务注册与发现;Ribbon负责负载均衡;Feign简化了Web服务客户端调用方式。这三个组件可以协同工作,共同构建稳定、高效的微服务架构。 1 Eureka 分布式系统的CAP定理: 一致性(Consistency)&am…...

Web项目测试专题(六)压力测试

概述: 压力测试检验Web应用在高并发、高负载情况下的表现,帮助预估系统承载能力和发现瓶颈 步骤: 并发用户测试:增加虚拟用户数测试系统在多人同时使用时的表现 负载测试:模拟高负载情况测试系统的稳定性和响应时间…...

2.5 使用注解进行单元测试详解

Mockito 使用注解进行单元测试详解 Mockito 提供了一系列注解来简化测试代码的编写,减少手动创建和管理 Mock 对象的样板代码。结合 JUnit 5,可以更高效地构建清晰、易维护的单元测试。 1. 核心注解概览 注解作用Mock创建并注入一个 Mock 对象&#xf…...

2025年SEO工具有哪些?老品牌SEO工具有哪些

随着2025年互联网的发展和企业线上营销的日益重要,SEO(搜索引擎优化)逐渐成为了提高网站曝光率和流量的重要手段。SEO的工作不仅仅是简单地通过关键词优化和内容发布就能够实现的,它需要依赖一系列专业的SEO工具来帮助分析、监测和…...

使用 React 16+Webpack 和 pdfjs-dist 或 react-pdf 实现 PDF 文件显示、定位和高亮

写在前面 在本文中,我们将探讨如何使用 React 16Webpack 和 pdfjs-dist 或 react-pdf 库来实现 PDF 文件的显示、定位和高亮功能。这些库提供了强大的工具和 API,使得在 Web 应用中处理 PDF 文件变得更加容易。 项目设置 首先,我们需要创建…...

LabVIEW显微镜成像偏差校准

在高精度显微镜成像中,用户常常需要通过点击图像的不同位置,让电机驱动探针移动到指定点进行观察。然而,在实际操作中,经常会遇到一个问题:当点击位于图像中心附近的点时,探针能够相对准确地定位&#xff1…...

【Elasticsearch】文本分析Text analysis概述

文本分析概述 文本分析使 Elasticsearch 能够执行全文搜索,搜索结果会返回所有相关的结果,而不仅仅是完全匹配的结果。 如果你搜索“Quick fox jumps”,你可能希望找到包含“A quick brown fox jumps over the lazy dog”的文档&#xff0c…...

23页PDF | 国标《GB/T 44109-2024 信息技术 大数据 数据治理实施指南 》发布

一、前言 《信息技术 大数据 数据治理实施指南》是中国国家标准化管理委员会发布的关于大数据环境下数据治理实施的指导性文件,旨在为组织开展数据治理工作提供系统性的方法和框架。报告详细阐述了数据治理的实施过程,包括规划、执行、评价和改进四个阶…...

AI代码生成器如何重塑前端开发的工作环境

近年来,人工智能(AI)技术迅猛发展,深刻地改变着各行各业的工作方式。在软件开发领域,AI写代码工具的出现更是掀起了一场革命,尤其对前端开发工程师的工作环境和协作方式产生了深远的影响。本文将深入探讨AI…...

kafka的架构和工作原理

目录 Kafka 架构 Kafka 工作原理 Kafka 数据流 Kafka 核心特性 总结 Kafka 架构 1. 生产者(Producer) 2. 消费者(Consumer) 3. 主题(Topic) 4. 分区(Partition) 5. 副本(Replica) 6. 代理(Broker) 7. ZooKeeper(旧版本)/KRaft(新版本) Kafka 工作…...

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书,用来给ios打包用,证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中,选择系统。(选登录也行,反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…...

索引的详细介绍

数据库索引是一种用于加速数据检索的数据结构,类似于书籍的目录。通过索引,数据库可以快速定位数据,而无需扫描整个表。以下是关于数据库索引的详细介绍: 1. 索引的基本概念 定义:索引是数据库表中一列或多列的值及其…...

Python 基于 OpenCV 的人脸识别上课考勤系统(附源码,部署教程)

博主介绍:✌2013crazy、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&a…...

TikTok网页版访问受限?一文解析解决方案

TikTok网页版是许多用户用来浏览视频、管理账号和发布内容的重要工具。然而,部分用户可能会遇到无法打开TikTok网页版的问题,如页面加载失败、显示网络错误或提示访问受限。本文将帮助你快速排查问题,并提供解决方案,让你顺利访问…...