
06 模型选择与 Cross Validation为什么不能只做一次 Train/Test Split模型训练完成以后我们通常会面临一个问题Model A Model B Model C到底哪个模型更好或者max_depth 3 max_depth 5 max_depth 10哪个超参数更好这就是Model Selection 模型选择而 Cross Validation 是模型选择中最重要的方法之一。一、最简单的 Train/Test Split最基本的方法是Dataset ↓ Train Set Test Set例如80% Train 20% TestTrain Set 用于训练模型。Test Set 用于最终评估模型。这种方法简单但是存在一个问题评估结果可能非常依赖这一次随机划分。二、一次划分可能具有偶然性假设数据集并不大。第一次划分Train Set 比较容易 Test Set 比较容易模型得到Accuracy 92%第二次划分Test Set 恰好包含很多困难样本模型可能只有Accuracy 84%那么92% 84%哪一个才更接近模型的真实泛化能力这就是单次划分的问题。三、Cross Validation 的基本思想Cross Validation 中文通常称为交叉验证核心思想是不要只验证一次而是让不同样本轮流进入验证集。最常见的方法就是k-fold Cross Validation四、k-fold Cross Validation假设k 5把数据分成Fold 1 Fold 2 Fold 3 Fold 4 Fold 5第一次Train: Fold 2 Fold 3 Fold 4 Fold 5 Validation: Fold 1第二次Train: Fold 1 Fold 3 Fold 4 Fold 5 Validation: Fold 2一直重复到每一个 Fold 都作为一次 Validation Set五、5-fold Cross Validation可以表示为Round 1: [V][T][T][T][T] Round 2: [T][V][T][T][T] Round 3: [T][T][V][T][T] Round 4: [T][T][T][V][T] Round 5: [T][T][T][T][V]其中T Training V Validation最后得到五个分数0.88 0.91 0.87 0.90 0.89最终可以计算平均值Mean1k∑i1kScoreiMean\frac{1}{k}\sum_{i1}^{k}Score_iMeank1i1∑kScorei例如Mean0.880.910.870.900.8950.89Mean\frac{0.880.910.870.900.89}{5}0.89Mean50.880.910.870.900.890.89于是CV Score 0.89六、为什么 Cross Validation 更可靠因为每一个样本都有机会作为 Training Data 同时也作为 Validation Data因此模型评估不会过度依赖某一次幸运或不幸运的数据划分Cross Validation 能更稳定地估计模型的generalization performance 泛化性能七、Cross Validation 不是 Test Set 的替代品这是非常重要的一点。标准流程应该是原始 Dataset ↓ Train / Test Split ↓ Train 部分内部 做 Cross Validation ↓ 选择模型和超参数 ↓ 使用整个 Train Set 重新训练 ↓ 最后只在 Test Set 上评估一次也就是说Cross Validation 用于模型选择 Test Set 用于最终考试八、为什么不能反复使用 Test Set假设你不断尝试Model A Model B Model C Model D每次都查看 Test Accuracy。然后选择 Test Accuracy 最高的模型。虽然模型没有直接在 Test Set 上训练但是你的模型选择决策已经使用了 Test Set 的信息。这样实际上就产生了Test Set Leakage最终的 Test Score 会变得过于乐观。九、Validation Set 和 Test Set 的区别可以把整个数据划分理解为Training Set → 学参数 Validation Set → 选模型、选超参数 Test Set → 最终评价而 k-fold Cross Validation 本质上就是在 Training Data 内部更加高效地构造多个 Validation Set。十、Cross Validation 如何用于模型选择假设有两个模型Model A Model B5-fold 结果Model A: 0.88 0.89 0.90 0.87 0.91 Model B: 0.90 0.92 0.86 0.91 0.89除了平均值还应该观察波动。例如Mean Standard Deviation因为一个模型可能平均分高 但不同 Fold 波动非常大这说明模型稳定性可能较差。十一、Cross Validation 可以用于选择什么常见用途包括模型类型选择 超参数选择 特征选择 预处理策略比较 阈值策略比较例如Decision Tree: max_depth 3 5 7 10对每一个参数执行 5-fold CV。比较平均 F1。选择表现最好的参数。十二、分类问题最好考虑 Stratified k-fold假设Positive 10% Negative 90%普通随机划分可能导致某一个 Fold 中Positive 特别少因此分类任务中常使用Stratified k-fold它尽量保证每个 Fold 中的类别比例 接近整体数据集对于类别不平衡问题尤其重要。十三、Cross Validation 也可能产生 Data LeakageCross Validation 并不是自动安全的。例如你在划分 Fold 之前先使用整个数据集计算Normalization mean Feature scaling Feature selection PCA Missing value statistics那么 Validation Fold 的信息已经进入预处理过程。这仍然属于Data Leakage正确流程应该是每一个 Fold 内 Train Fold → Fit preprocessing → Transform Train → Transform Validation 而不是 整个 Dataset → Fit preprocessing → 再 Cross Validation十四、时间序列不能随便使用普通 k-fold对于时间序列2021 2022 2023 2024 2025如果使用普通随机 k-fold可能出现用 2025 年的数据训练 预测 2022 年这在真实部署场景中不合理。时间序列应该保持过去 → 未来因此需要使用Time-based Split Rolling Validation Walk-forward Validation十五、Cross Validation 的核心价值Cross Validation 的真正意义不是让模型分数更高而是更可靠地估计模型对未知数据的泛化性能并降低一次随机划分带来的偶然性。十六、总结一个规范的模型选择流程可以概括为Dataset ↓ Train / Test Split ↓ Train Data ↓ k-fold Cross Validation ↓ 比较模型与超参数 ↓ 选择最佳方案 ↓ 在全部 Train Data 上重新训练 ↓ Test Set 最终评估下一篇将进一步讨论一个实际问题k 到底应该选多少