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

如何从train训练集中移除已有的val数据以生成新训练子集?

训练集过滤验证集重复样本实现方案

核心逻辑为匹配两个数据集的样本特征,剔除训练集中和验证集完全一致的样本即可,下面分常用的几种数据集格式给出实现代码:

  • 如果你用的是Pandas DataFrame格式存储数据集
import pandas as pd

# val_data = 过往实验得到的验证集
# train_data = 当前待处理的训练集

# 方法1:全字段匹配,适合没有唯一样本ID的场景
val_sample_keys = val_data.apply(tuple, axis=1).tolist()
# 过滤出训练集里不在验证集中的样本
new_data = train_data[~train_data.apply(tuple, axis=1).isin(val_sample_keys)].reset_index(drop=True)

# 方法2:有唯一样本ID/文件名的场景,效率更高
# new_data = train_data[~train_data['样本ID字段名'].isin(val_data['样本ID字段名'])].reset_index(drop=True)
  • 如果你用的是普通Python列表存储样本(比如每个元素是字典、数组、文本字符串)
# 把验证集样本转成可哈希的格式存入集合,匹配效率远高于列表遍历
val_sample_set = set()
for sample in val_data:
    # 字典格式样本就取所有值拼接成元组,其他格式直接转元组即可
    sample_key = tuple(sample.values()) if isinstance(sample, dict) else tuple(sample)
    val_sample_set.add(sample_key)

new_data = []
for sample in train_data:
    sample_key = tuple(sample.values()) if isinstance(sample, dict) else tuple(sample)
    if sample_key not in val_sample_set:
        new_data.append(sample)
  • 如果你用的是Hugging Face Datasets格式的数据集
from datasets import Dataset

def generate_sample_key(sample, col_list):
    # 按数据集的字段拼接生成唯一匹配键,无关字段可以直接排除
    return tuple(sample[col] for col in col_list)

val_keys = set(generate_sample_key(sample, val_data.column_names) for sample in val_data)
# 过滤规则:样本不在验证集键集合里就保留
new_data = train_data.filter(lambda x: generate_sample_key(x, val_data.column_names) not in val_keys)

注意点:

  1. 数据集体量较大时优先用唯一ID匹配,不要全字段遍历,能大幅提升运行速度
  2. 生成匹配键的时候要排除和样本内容无关的字段(比如存储时附加的训练时间、处理时间戳字段),避免误删有效样本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:15:03