为什么需要交叉验证?
训练模型时,我们需要把数据分为训练集和测试集。但如果数据量有限,简单地一次划分(留出法)可能导致:
- 训练数据不够,模型学不好
- 评估结果不稳定,换一种划分就不同
交叉验证就是为了解决这个问题。
K折交叉验证
最常用的是K折交叉验证(K-Fold Cross Validation):
- 将数据随机分成K份(通常K=5或10)
- 每次用其中K-1份训练,剩下1份验证
- 重复K次,每份数据都当过一次验证集
- 取K次验证结果的平均值作为最终评估
示例(5折)
| 轮次 | 训练数据 | 验证数据 |
|---|---|---|
| 第1轮 | 2,3,4,5 | 1 |
| 第2轮 | 1,3,4,5 | 2 |
| 第3轮 | 1,2,4,5 | 3 |
| 第4轮 | 1,2,3,5 | 4 |
| 第5轮 | 1,2,3,4 | 5 |
交叉验证的优势
- 最大化数据利用率:每个样本都参与了训练和验证
- 评估更稳定:多次评估取平均,减少随机性
- 适合小数据集:数据量有限时的最佳选择
数据划分的三种方法对比
| 方法 | 数据利用率 | 评估稳定性 | 适用场景 |
|---|---|---|---|
| 留出法 | 较低 | 较低 | 数据量充足时 |
| 交叉验证 | 高 | 高 | 数据量有限时 |
| 随机划分 | 较低 | 较低 | 快速评估 |
训练集、验证集、测试集
| 数据集 | 用途 | 使用时机 |
|---|---|---|
| 训练集 | 训练模型参数 | 训练过程中 |
| 验证集 | 调整超参数、选择模型 | 训练过程中 |
| 测试集 | 最终评估模型表现 | 训练结束后 |
考试要点
- 数据量有限时,交叉验证最充分利用数据
- K折交叉验证中,每个样本都会被用作验证
- 测试集用于训练结束后的最终评估
- 验证集用于训练过程中的超参数调优