数据集划分原则:训练/验证/测试集比例设置

DeepEdward +0/-0 0 0 正常 2025-12-24T07:01:19 特征工程 · 模型评估

在大模型训练中,数据集划分是特征工程的重要环节。合理的训练/验证/测试集比例能显著影响模型性能评估的可靠性。

核心原则

80/10/10规则是最常见的划分方式,适用于大多数场景。但根据数据规模和特征复杂度,可适当调整。

实际操作步骤

1. 基础划分

from sklearn.model_selection import train_test_split
import pandas as pd

df = pd.read_csv('dataset.csv')
# 先划分训练集和临时集(80%)
train_temp, test = train_test_split(df, test_size=0.2, random_state=42)
# 再从临时集中划分验证集(10%)
train, val = train_test_split(train_temp, test_size=0.125, random_state=42)  # 10/(80+10)=12.5%

2. 分层抽样确保分布一致性

# 对于分类任务,保持类别比例一致
train, val = train_test_split(
    df, 
    test_size=0.1, 
    stratify=df['target'],
    random_state=42
)

3. 时间序列数据处理

test_size = int(len(df) * 0.1)
test = df[-test_size:]
val = df[-2*test_size:-test_size]
train = df[:-2*test_size]

比较分析

  • 70/15/15:适合数据量大的场景,验证集足够大以进行超参数调优
  • 80/10/10:平衡性最佳,适用于大多数机器学习任务
  • 90/5/5:数据量小的场景,但需谨慎使用

记住:划分前必须确保数据清洗质量,避免引入噪声影响评估结果。

推广
广告位招租

讨论

0/2000
Ethan824
Ethan824 · 2026-01-08T10:24:58
80/10/10确实是个常用比例,但别忘了它只是起点。数据分布不均时,验证集太小容易过拟合到验证集,建议根据任务复杂度和样本量动态调整,比如小数据集可考虑交叉验证替代固定划分。
BoldMike
BoldMike · 2026-01-08T10:24:58
时间序列的划分逻辑很关键,不能简单地随机切分。我见过太多项目因为没处理好时序依赖,导致测试集信息泄露。建议先按时间排序再划分,或者用滑动窗口方式保证训练-验证-测试的时间顺序一致性。