为什么要划分数据?
如果用同一批数据既训练模型又评估模型,就像用考试原题来考试——得分再高也不说明真的学会了。
把数据划分成不同的子集,是为了客观评估模型在新数据上的表现能力(泛化能力)。
三个数据集的作用
训练集(Training Set)
- 用途:训练模型,让模型学习数据中的规律
- 使用时机:训练过程中
- 比例:通常占60%-80%
验证集(Validation Set)
- 用途:调整超参数(如学习率、网络层数)、选择最优模型
- 使用时机:训练过程中
- 比例:通常占10%-20%
测试集(Testing Set)
- 用途:最终评估模型性能,模拟模型在真实场景中面对未见数据的表现
- 使用时机:训练结束后
- 比例:通常占10%-20%
三者的关系
训练集 → 训练模型参数(权重、偏置)
验证集 → 选择超参数和模型架构(过程中反复使用)
测试集 → 最终的"期末考试"(只用一次)
常用划分比例
| 方案 | 训练集 | 验证集 | 测试集 |
|---|---|---|---|
| 简单划分 | 70% | 15% | 15% |
| 大数据集 | 98% | 1% | 1% |
| Sklearn默认 | 80% | - | 20% |
使用Scikit-learn划分数据
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
test_size=0.2 表示20%的数据作为测试集。
考试要点
- 训练结束后用于模型评估的是测试集
- 验证集用于训练过程中的超参数调优
- 测试集模拟模型面对未见数据的表现
- train_test_split 是 Scikit-learn 中划分数据的标准方法