You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据增强场景下如何规避数据泄露?现有代码方案有效性求证

你的数据增强防泄露方案完全可行!

这个思路精准命中了数据增强防泄露的核心要求:先基于原始数据集做分层划分(你用stratify=y还保证了训练/测试集的类别分布一致,这点做得很好),再将对应ID的增强数据归入原始数据所在的集合。这样一来,任何原始数据和它的所有增强副本都会被严格限制在同一集合里,绝对不会出现“副本在训练集、原始数据在测试集”这种泄露场景。

代码里的几个小优化点

  1. 替换已弃用的append方法:pandas从2.0版本开始弃用了DataFrame.append,建议改用pd.concat,兼容性更好;
  2. 简化标签提取逻辑:不用复杂的列筛选,直接提取emotion列即可。

优化后的代码示例:

import pandas as pd
from sklearn.model_selection import train_test_split

# 读取数据
df = pd.read_excel("/content/drive/MyDrive/data/audio.xlsx")
df2 = pd.read_excel("/content/drive/MyDrive/data/audioAUG.xlsx")

# 拆分原始数据特征与标签
X = df.drop('emotion', axis=1)
y = df['emotion']

# 先划分原始数据的训练/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42, stratify=y)

# 匹配对应ID的增强数据
X_train_AUG = df2[df2['id'].isin(X_train.id.to_list())]
X_test_AUG = df2[df2['id'].isin(X_test.id.to_list())]

# 合并特征(用concat替代append)
X_train = pd.concat([X_train, X_train_AUG.drop('emotion', axis=1)])
X_test = pd.concat([X_test, X_test_AUG.drop('emotion', axis=1)])

# 合并标签
y_train = pd.concat([y_train, X_train_AUG['emotion']])
y_test = pd.concat([y_test, X_test_AUG['emotion']])

额外注意事项

  • 确保id字段的唯一性:每个原始数据的ID必须唯一,且增强数据的ID严格对应原始数据,否则会出现匹配错误;
  • 如果后续要做交叉验证,也要遵循同一逻辑:先按ID分组,再把整个组分配到训练或验证fold中,不能在fold内部再拆分原始数据和增强副本。

内容的提问来源于stack exchange,提问作者PM92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:10:25